* @license MIT */ class MagicSet extends MagicMethodGenerator { /** * Constructor */ public function __construct( ReflectionClass $originalClass, PropertyGenerator $valueHolder, PropertyGenerator $prefixInterceptors, PropertyGenerator $suffixInterceptors, PublicPropertiesMap $publicProperties ) { parent::__construct( $originalClass, '__set', array(new ParameterGenerator('name'), new ParameterGenerator('value')) ); $override = $originalClass->hasMethod('__set'); $valueHolderName = $valueHolder->getName(); $this->setDocblock(($override ? "{@inheritDoc}\n" : '') . '@param string $name'); $callParent = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_SET, 'name', 'value', $valueHolder, 'returnValue' ); if (! $publicProperties->isEmpty()) { $callParent = 'if (isset(self::$' . $publicProperties->getName() . "[\$name])) {\n" . ' $returnValue = ($this->' . $valueHolderName . '->$name = $value);' . "\n} else {\n $callParent\n}\n\n"; } $this->setBody( InterceptorGenerator::createInterceptedMethodBody( $callParent, $this, $valueHolder, $prefixInterceptors, $suffixInterceptors ) ); } }