* @license MIT */ class MagicUnset 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, '__unset', array(new ParameterGenerator('name'))); $override = $originalClass->hasMethod('__unset'); $callParent = ''; $this->setDocblock(($override ? "{@inheritDoc}\n" : '') . '@param string $name'); if (! $publicProperties->isEmpty()) { $callParent = 'if (isset(self::$' . $publicProperties->getName() . "[\$name])) {\n" . ' unset($this->$name);' . "\n\n return;" . "\n}\n\n"; } if ($override) { $callParent .= "return parent::__unset(\$name);"; } else { $callParent .= PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_UNSET, 'name' ); } $this->setBody( '$this->' . $initializerProperty->getName() . ' && $this->' . $callInitializer->getName() . '(\'__unset\', array(\'name\' => $name));' . "\n\n" . $callParent ); } }