Doctrine\Common\Proxy\ProxyGenerator::generateSleepImpl PHP Метод

generateSleepImpl() приватный Метод

Generates implementation for the __sleep method of proxies.
private generateSleepImpl ( Doctrine\Common\Persistence\Mapping\ClassMetadata $class ) : string
$class Doctrine\Common\Persistence\Mapping\ClassMetadata
Результат string
    private function generateSleepImpl(ClassMetadata $class)
    {
        $hasParentSleep = $class->getReflectionClass()->hasMethod('__sleep');
        $inheritDoc = $hasParentSleep ? '{@inheritDoc}' : '';
        $sleepImpl = <<<EOT
    /**
     * {$inheritDoc}
     * @return array
     */
    public function __sleep()
    {

EOT;
        if ($hasParentSleep) {
            return $sleepImpl . <<<'EOT'
        $properties = array_merge(['__isInitialized__'], parent::__sleep());

        if ($this->__isInitialized__) {
            $properties = array_diff($properties, array_keys($this->__getLazyProperties()));
        }

        return $properties;
    }
EOT;
        }
        $allProperties = ['__isInitialized__'];
        /* @var $prop \ReflectionProperty */
        foreach ($class->getReflectionClass()->getProperties() as $prop) {
            if ($prop->isStatic()) {
                continue;
            }
            $allProperties[] = $prop->isPrivate() ? "" . $prop->getDeclaringClass()->getName() . "" . $prop->getName() : $prop->getName();
        }
        $lazyPublicProperties = array_keys($this->getLazyLoadedPublicProperties($class));
        $protectedProperties = array_diff($allProperties, $lazyPublicProperties);
        foreach ($allProperties as &$property) {
            $property = var_export($property, true);
        }
        foreach ($protectedProperties as &$property) {
            $property = var_export($property, true);
        }
        $allProperties = implode(', ', $allProperties);
        $protectedProperties = implode(', ', $protectedProperties);
        return $sleepImpl . <<<EOT
        if (\$this->__isInitialized__) {
            return [{$allProperties}];
        }

        return [{$protectedProperties}];
    }
EOT;
    }