20 namespace Doctrine\Instantiator;
58 if (isset(self::$cachedCloneables[$className])) {
59 return clone self::$cachedCloneables[$className];
62 if (isset(self::$cachedInstantiators[$className])) {
63 $factory = self::$cachedInstantiators[$className];
80 $factory = self::$cachedInstantiators[$className] = $this->
buildFactory($className);
81 $instance = $factory();
84 self::$cachedCloneables[$className] = clone $instance;
103 return function () use ($reflectionClass) {
104 return $reflectionClass->newInstanceWithoutConstructor();
108 $serializedString = sprintf(
117 return function () use ($serializedString) {
118 return unserialize($serializedString);
131 if (! class_exists($className)) {
135 $reflection =
new ReflectionClass($className);
137 if ($reflection->isAbstract()) {
154 set_error_handler(
function ($code, $message, $file, $line) use ($reflectionClass, & $error) {
166 restore_error_handler();
184 unserialize($serializedString);
185 }
catch (Exception $exception) {
186 restore_error_handler();
199 if (\PHP_VERSION_ID >= 50600) {
216 if ($reflectionClass->isInternal()) {
219 }
while ($reflectionClass = $reflectionClass->getParentClass());
239 && $reflectionClass->implementsInterface(
'Serializable')
241 return self::SERIALIZATION_FORMAT_USE_UNSERIALIZER;
244 return self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER;
254 return PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50513;
266 if (method_exists($reflection,
'isCloneable') && ! $reflection->isCloneable()) {
271 return ! $reflection->hasMethod(
'__clone');