From 8b7deeb4b8ec77206600701f8bbc69d52da6a108 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 23 Jan 2016 02:19:51 +0100 Subject: [PATCH] #208 - documenting `LazyLoadingGhostFactory` in the docblock, adding return type hint --- .../Factory/LazyLoadingGhostFactory.php | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/src/ProxyManager/Factory/LazyLoadingGhostFactory.php b/src/ProxyManager/Factory/LazyLoadingGhostFactory.php index f3908cdc0..cb12b4c69 100644 --- a/src/ProxyManager/Factory/LazyLoadingGhostFactory.php +++ b/src/ProxyManager/Factory/LazyLoadingGhostFactory.php @@ -20,6 +20,7 @@ namespace ProxyManager\Factory; +use Closure; use ProxyManager\Proxy\GhostObjectInterface; use ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator; use ProxyManager\ProxyGenerator\ProxyGeneratorInterface; @@ -29,10 +30,8 @@ * * @author Marco Pivetta * @license MIT - * - * @method GhostObjectInterface createProxy($className, \Closure $initializer) */ -class LazyLoadingGhostFactory extends AbstractLazyFactory +class LazyLoadingGhostFactory extends AbstractBaseFactory { /** * @var \ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator|null @@ -46,4 +45,52 @@ protected function getGenerator() : ProxyGeneratorInterface { return $this->generator ?: $this->generator = new LazyLoadingGhostGenerator(); } + + /** + * Creates a new lazy proxy instance of the given class with + * the given initializer + * + * Please refer to the following documentation when using this method: + * + * @link https://github.com/Ocramius/ProxyManager/blob/master/docs/lazy-loading-ghost-object.md + * + * @param string $className name of the class to be proxied + * @param Closure $initializer initializer to be passed to the proxy. The initializer closure should have following + * signature: + * + * + * $initializer = function ( + * GhostObjectInterface $proxy, + * string $method, + * array $parameters, + * & $initializer, + * array $properties + * ) {}; + * + * + * Where: + * - $proxy is the proxy instance on which the initializer is acting + * - $method is the name of the method that triggered the lazy initialization + * - $parameters are the parameters that were passed to $method + * - $initializer by-ref initializer - should be assigned null in the initializer body + * - $properties a by-ref map of the properties of the object, indexed by PHP + * internal property name. Assign values to it to initialize the + * object state + * + * @param mixed[] $proxyOptions a set of options to be used when generating the proxy. Currently supports only + * key "skippedProperties", which allows to skip lazy-loading of some properties. + * "skippedProperties" is a string[], containing a list of properties referenced + * via PHP's internal property name (i.e. "\0ClassName\0propertyName") + * + * @return GhostObjectInterface + */ + public function createProxy( + string $className, + Closure $initializer, + array $proxyOptions = [] + ) : GhostObjectInterface { + $proxyClassName = $this->generateProxy($className, $proxyOptions); + + return $proxyClassName::staticProxyConstructor($initializer); + } }