From 49f8a2c2c15bde363f5f1206b1d07f5dff85e78e Mon Sep 17 00:00:00 2001 From: lsmith77 Date: Wed, 7 Dec 2011 13:23:53 +0100 Subject: [PATCH 1/3] added Proxy::__isInitialized() --- lib/Doctrine/Common/Persistence/Proxy.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/Common/Persistence/Proxy.php b/lib/Doctrine/Common/Persistence/Proxy.php index 4bd0084e6..dccbaa211 100644 --- a/lib/Doctrine/Common/Persistence/Proxy.php +++ b/lib/Doctrine/Common/Persistence/Proxy.php @@ -35,5 +35,12 @@ interface Proxy * * @return void */ - public function __load(); + function __load(); + + /** + * Check if the proxy is initialized. + * + * @return bool + */ + function __isInitialized(); } From 06da1abdb7591d7762cbc22eb5a119e788e3ae81 Mon Sep 17 00:00:00 2001 From: lsmith77 Date: Wed, 7 Dec 2011 13:24:24 +0100 Subject: [PATCH 2/3] refactored Util\Debug to use the Proxy interface --- lib/Doctrine/Common/Persistence/Proxy.php | 7 +++++ lib/Doctrine/Common/Util/Debug.php | 31 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/Common/Persistence/Proxy.php b/lib/Doctrine/Common/Persistence/Proxy.php index dccbaa211..41a108418 100644 --- a/lib/Doctrine/Common/Persistence/Proxy.php +++ b/lib/Doctrine/Common/Persistence/Proxy.php @@ -43,4 +43,11 @@ function __load(); * @return bool */ function __isInitialized(); + + /** + * Get the list of internal properties + * + * @return array + */ + function __getInternalProperties(); } diff --git a/lib/Doctrine/Common/Util/Debug.php b/lib/Doctrine/Common/Util/Debug.php index aebbb0755..42b277f75 100644 --- a/lib/Doctrine/Common/Util/Debug.php +++ b/lib/Doctrine/Common/Util/Debug.php @@ -21,6 +21,9 @@ namespace Doctrine\Common\Util; +use Doctrine\ORM\Proxy\Proxy as ORMProxy; +use Doctrine\Common\Persistence\Proxy; + /** * Static class containing most used debug methods. * @@ -41,6 +44,28 @@ final class Debug */ private function __construct() {} + /** + * Determine if a given variable contains a Proxy + * It has BC handling for Doctrine ORM 2.0/2.1 + * + * @static + * @param $var + * @param null $initializationState if set, it is compared to the initialization state of the variable + * @return bool + */ + public static function isProxy($var, $initializationState = null) + { + if ($var instanceof Proxy) { + return null === $initializationState ? true : $var->__isInitialized() === $initializationState; + } + + if ($var instanceof ORMProxy) { + return null === $initializationState ? true : $var->__isInitialized__ === $initializationState; + } + + return false; + } + /** * Prints a dump of the public, protected and private properties of $var. * @@ -94,7 +119,7 @@ public static function export($var, $maxDepth) $return = new \stdclass(); $return->{'__CLASS__'} = get_class($var); - if ($var instanceof \Doctrine\ORM\Proxy\Proxy && ! $var->__isInitialized__) { + if (static::isProxy($var, false)) { $reflProperty = $reflClass->getProperty('_identifier'); $reflProperty->setAccessible(true); @@ -104,8 +129,10 @@ public static function export($var, $maxDepth) } else { $excludeProperties = array(); - if ($var instanceof \Doctrine\ORM\Proxy\Proxy) { + if ($var instanceof ORMProxy) { $excludeProperties = array('_entityPersister', '__isInitialized__', '_identifier'); + } elseif ($var instanceof Proxy) { + $excludeProperties = $var->__getInternalProperties(); } foreach ($reflClass->getProperties() as $reflProperty) { From e2e78d08f84d6b4b43687c7ba73048393cd85597 Mon Sep 17 00:00:00 2001 From: lsmith77 Date: Wed, 7 Dec 2011 13:50:29 +0100 Subject: [PATCH 3/3] tweaked Debug class use of Proxy --- lib/Doctrine/Common/Util/Debug.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/Common/Util/Debug.php b/lib/Doctrine/Common/Util/Debug.php index 42b277f75..a244a6653 100644 --- a/lib/Doctrine/Common/Util/Debug.php +++ b/lib/Doctrine/Common/Util/Debug.php @@ -129,10 +129,10 @@ public static function export($var, $maxDepth) } else { $excludeProperties = array(); - if ($var instanceof ORMProxy) { - $excludeProperties = array('_entityPersister', '__isInitialized__', '_identifier'); - } elseif ($var instanceof Proxy) { + if ($var instanceof Proxy) { $excludeProperties = $var->__getInternalProperties(); + } elseif ($var instanceof ORMProxy) { + $excludeProperties = array('_entityPersister', '__isInitialized__', '_identifier'); } foreach ($reflClass->getProperties() as $reflProperty) {