Skip to content

Commit

Permalink
#208 - documenting LazyLoadingGhostFactory in the docblock, adding …
Browse files Browse the repository at this point in the history
…return type hint
  • Loading branch information
Ocramius committed Jan 23, 2016
1 parent 95f84aa commit 8b7deeb
Showing 1 changed file with 50 additions and 3 deletions.
53 changes: 50 additions & 3 deletions src/ProxyManager/Factory/LazyLoadingGhostFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

namespace ProxyManager\Factory;

use Closure;
use ProxyManager\Proxy\GhostObjectInterface;
use ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator;
use ProxyManager\ProxyGenerator\ProxyGeneratorInterface;
Expand All @@ -29,10 +30,8 @@
*
* @author Marco Pivetta <ocramius@gmail.com>
* @license MIT
*
* @method GhostObjectInterface createProxy($className, \Closure $initializer)
*/
class LazyLoadingGhostFactory extends AbstractLazyFactory
class LazyLoadingGhostFactory extends AbstractBaseFactory
{
/**
* @var \ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator|null
Expand All @@ -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:
*
* <code>
* $initializer = function (
* GhostObjectInterface $proxy,
* string $method,
* array $parameters,
* & $initializer,
* array $properties
* ) {};
* </code>
*
* 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);
}
}

0 comments on commit 8b7deeb

Please sign in to comment.