title |
---|
Upgrade |
This is a list of backwards compatibility (BC) breaks introduced in ProxyManager:
- PHP
~7.0
is now required to use ProxyManager - HHVM compatibility is not guaranteed, as HHVM is not yet PHP 7 compliant
- All classes and interfaces now use strict scalar type hints.
If you extended or implemented anything from the
ProxyManager\
namespace, you probably need to change that code to adapt it to the new signature. - All classes and interfaces now use return type declarations.
If you extended or implemented anything from the
ProxyManager\
namespace, you probably need to change that code to adapt it to the new signature. - ProxyManager will no longer write proxies to disk by default:
the
EvaluatingGeneratorStrategy
is used instead. If you still want ProxyManager to write files to disk, please refer to the tuning for production docs - Ghost objects were entirely rewritten, for better support and improved performance. Lazy-loading is not triggered by public API access, but by property access (private and public). While this is not really a BC break, you are encouraged to check your applications if you rely on ghost objects.
- If ProxyManager can't find a proxy, it will now automatically attempt to auto-generate it, regardless of the settings passed to it.
ProxyManager\Configuration#setAutoGenerateProxies()
was removed. Please look for calls to this method and remove them.- Private properties are now also correctly handled by ProxyManager: accessing proxy state via friend classes (protected or private scope) does not require any particular workarounds anymore.
ProxyManager\Version::VERSION
was removed. Please useProxyManager\Version::getVersion()
instead.- PHP 4 style constructors are no longer supported
1.0.0
is be fully compatible with 0.5.0
.
- The Generated Hydrator has been removed - it is now available as a separate project at Ocramius/GeneratedHydrator #65
- When having a
public function __get($name)
defined (by-val) and public properties, it won't be possible to get public properties by-ref while initializing the object. Either drop__get()
or implement a by-ref& __get()
#126 - Proxies are now being always auto-generated if they could not be autoloaded by a factory. The methods
ProxyManager\Configuration#setAutoGenerateProxies()
andProxyManager\Configuration#doesAutoGenerateProxies()
are now no-op and deprecated, and will be removed in the next minor version #87 #90 - Proxy public properties defaults are now set before initialization #116 #122
- An optional parameter
$options
was introduced inProxyManager\Inflector\ClassNameInflectorInterface#getProxyClassName($className, array $options = array())
parametrize the generated class name as of #10 and #59 - Generated hydrators no longer have constructor arguments. Any required reflection instantiation is now dealt with in the hydrator internally as of #63
- Interface names are also supported for proxy generation as of #40
- Generated hydrators were introduced
- An additional (optional) by-ref parameter was added to the lazy loading proxies' initializer to allow unsetting the initializer with less overhead.
- Dependency to jms/cg removed
- Moved code generation logic to
Zend\Code
- Added method
ProxyManager\Inflector\ClassNameInflectorInterface#isProxyClassName($className)
- The constructor of
ProxyManager\Autoloader\Autoloader
changed from__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator)
to__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator, \ProxyManager\Inflector\ClassNameInflectorInterface $classNameInflector)
- Classes implementing
CG\Core\GeneratorStrategyInterface
now implementProxyManager\GeneratorStrategy\GeneratorStrategyInterface
instead - All code generation logic has been replaced - If you wrote any logic based on
ProxyManager\ProxyGenerator
, you will have to rewrite it
-
The signature of initializers to be used with proxies implementing
ProxyManager\Proxy\LazyLoadingInterface
changed from:$initializer = function ($proxy, & $wrappedObject, $method, $parameters) {};
to
$initializer = function (& $wrappedObject, $proxy, $method, $parameters) {};
Only the order of parameters passed to the closures has been changed.