62 lines
1.3 KiB
PHP
62 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace ProxyManager\Example\GhostObjectSkippedProperties;
|
|
|
|
use Closure;
|
|
use ProxyManager\Factory\LazyLoadingGhostFactory;
|
|
use ProxyManager\Proxy\GhostObjectInterface;
|
|
use ReflectionProperty;
|
|
|
|
require_once __DIR__ . '/../vendor/autoload.php';
|
|
|
|
class User
|
|
{
|
|
private ?int $id = null;
|
|
|
|
private ?string $username = null;
|
|
|
|
public function getId() : ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getUsername() : ?string
|
|
{
|
|
return $this->username;
|
|
}
|
|
}
|
|
|
|
(static function () : void {
|
|
$proxy = (new LazyLoadingGhostFactory())->createProxy(
|
|
User::class,
|
|
static function (
|
|
GhostObjectInterface $proxy,
|
|
string $method,
|
|
array $parameters,
|
|
?Closure & $initializer,
|
|
array $properties
|
|
) {
|
|
$initializer = null;
|
|
|
|
var_dump('Triggered lazy-loading!');
|
|
|
|
$properties["\0ProxyManager\\Example\\GhostObjectSkippedProperties\\User\0username"] = 'Ocramius';
|
|
|
|
return true;
|
|
},
|
|
[
|
|
'skippedProperties' => ["\0User\0id"],
|
|
]
|
|
);
|
|
|
|
$idReflection = new ReflectionProperty(User::class, 'id');
|
|
|
|
$idReflection->setAccessible(true);
|
|
$idReflection->setValue($proxy, 123);
|
|
|
|
var_dump($proxy->getId());
|
|
var_dump($proxy->getUsername());
|
|
})();
|