* @license MIT */ class MagicIsset extends MagicMethodGenerator { /** * @param \ReflectionClass $originalClass * @param \Zend\Code\Generator\PropertyGenerator $initializerProperty * @param \Zend\Code\Generator\MethodGenerator $callInitializer * @param \ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap $publicProperties */ public function __construct( ReflectionClass $originalClass, PropertyGenerator $initializerProperty, MethodGenerator $callInitializer, PublicPropertiesMap $publicProperties ) { parent::__construct($originalClass, '__isset', array(new ParameterGenerator('name'))); $override = $originalClass->hasMethod('__isset'); $callParent = ''; $this->setDocblock(($override ? "{@inheritDoc}\n" : '') . '@param string $name'); if (! $publicProperties->isEmpty()) { $callParent = 'if (isset(self::$' . $publicProperties->getName() . "[\$name])) {\n" . ' return isset($this->$name);' . "\n}\n\n"; } if ($override) { $callParent .= 'return parent::__isset($name);'; } else { $callParent .= PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_ISSET, 'name' ); } $this->setBody( '$this->' . $initializerProperty->getName() . ' && $this->' . $callInitializer->getName() . '(\'__isset\', array(\'name\' => $name));' . "\n\n" . $callParent ); } }