public static function fromReflection(Zend_Reflection_Method $reflectionMethod) { $method = new self(); $method->setSourceContent($reflectionMethod->getContents(false)); $method->setSourceDirty(false); if ($reflectionMethod->getDocComment() != '') { $method->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionMethod->getDocblock())); } $method->setFinal($reflectionMethod->isFinal()); if ($reflectionMethod->isPrivate()) { $method->setVisibility(self::VISIBILITY_PRIVATE); } elseif ($reflectionMethod->isProtected()) { $method->setVisibility(self::VISIBILITY_PROTECTED); } else { $method->setVisibility(self::VISIBILITY_PUBLIC); } $method->setStatic($reflectionMethod->isStatic()); $method->setName($reflectionMethod->getName()); foreach ($reflectionMethod->getParameters() as $reflectionParameter) { $method->setParameter(Zend_CodeGenerator_Php_Parameter::fromReflection($reflectionParameter)); } $body = $reflectionMethod->getBody(); $body2 = str_replace("\n\n", "\n", $body); $body2 = preg_replace("|^\n\\s{4}|muU", "\n", $body2); $body2 = preg_replace("|^\\s{4}|muU", "", $body2); // $body2 = str_replace(' ', '.', $body2); //dmDebug::kill($body, "\n".$body2); $method->setBody($body2); return $method; }
/** * fromReflection() * * @param Zend_Reflection_Parameter $reflectionParameter * @return Zend_CodeGenerator_Php_Parameter */ public static function fromReflection(Zend_Reflection_Parameter $reflectionParameter) { $param = new Zend_CodeGenerator_Php_Parameter(); $param->setName($reflectionParameter->getName()); if($reflectionParameter->isArray()) { $param->setType('array'); } else { $typeClass = $reflectionParameter->getClass(); if($typeClass !== null) { $param->setType($typeClass->getName()); } } $param->setPosition($reflectionParameter->getPosition()); if($reflectionParameter->isOptional()) { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } $param->setPassedByReference($reflectionParameter->isPassedByReference()); return $param; }
/** * setParameter() * * @param Zend_CodeGenerator_Php_Parameter|array $parameter * @return Zend_CodeGenerator_Php_Method */ public function setParameter($parameter) { if (is_array($parameter)) { $parameter = new Zend_CodeGenerator_Php_Parameter($parameter); $parameterName = $parameter->getName(); } elseif ($parameter instanceof Zend_CodeGenerator_Php_Parameter) { $parameterName = $parameter->getName(); } else { require_once 'Zend/CodeGenerator/Php/Exception.php'; throw new Zend_CodeGenerator_Php_Exception('setParameter() expects either an array of method options or an instance of Zend_CodeGenerator_Php_Parameter'); } $this->_parameters[$parameterName] = $parameter; return $this; }
/** * @dataProvider dataFromReflection_Generate * @param string $methodName * @param string $expectedCode */ public function testFromReflection_Generate($methodName, $expectedCode) { $reflParam = $this->getFirstReflectionParameter($methodName); $codeGenParam = Zend_CodeGenerator_Php_Parameter::fromReflection($reflParam); $this->assertEquals($expectedCode, $codeGenParam->generate()); }
/** * @see models_ClassGenerator_Defaults_Interface::createMethodLoad */ public function createMethodLoad() { $resultMethod = new Zend_CodeGenerator_Php_Method(); $resultMethod->setName('load'); $resultMethod->setStatic(true); $resultMethod->setVisibility(Zend_CodeGenerator_Php_Property::VISIBILITY_PUBLIC); //---------------------- Parameters --------------------- $paramZendDbObj = new Zend_CodeGenerator_Php_Parameter(); $paramZendDbObj->setName('zendDbObj'); $paramZendDbObj->setType('Zend_Db_Adapter_Abstract'); $resultMethod->setParameter($paramZendDbObj); //Pkeys $pkeyAttributes = $this->getPersistenceInformation()->getPkeyAttributes(); if (!empty($pkeyAttributes)) { foreach ($pkeyAttributes as $pkeyAttribute) { /* @var $pkeyAttribute Zend_CodeGenerator_Php_Property */ $paramPkey = new Zend_CodeGenerator_Php_Parameter(); $paramPkey->setName('par' . ucfirst($pkeyAttribute->getName())); $paramPkey->setType(Model_ClassGenerator_PersistenceInformation::getType($pkeyAttribute)); $resultMethod->setParameter($paramPkey); } } //-------------------------------------------------------- //Pkeys $body = 'if(!isset(' . $this->_provideInstancesKeySelectorString() . ')){' . "\n"; $docblock = new Zend_CodeGenerator_Php_Docblock(); $docblock->setShortDescription('Loads the entry from the database.'); $resultMethod->setDocblock($docblock); $body .= "\t" . '$table = self::' . $this->_provideTableConstant() . ';' . "\n"; //TODO - Konstante! $body .= "\t" . '$select = $this->zendDbObj->select($table, \'*\');' . "\n"; $pkeyAttributes = $this->getPersistenceInformation()->getPkeyAttributes(); if (!empty($pkeyAttributes)) { foreach ($pkeyAttributes as $pkeyAttribute) { /* @var $pkeyAttribute Zend_CodeGenerator_Php_Property */ $body .= "\t" . '$select->where(self::' . $this->_provideTableConstant() . '.\'.\'.self::' . $this->_provideColumnConstant($pkeyAttribute) . '.\'=?\', $this->' . $pkeyAttribute->getName() . ');' . "\n\n"; } } $body .= "\t" . 'self::$instance' . $keysString . ' = new self($parZendDbObj);' . "\n"; $body .= '}' . "\n\n"; $body .= 'return self::$instance' . $keysString . ';'; $resultMethod->setBody($body); $this->getClass()->setMethod($resultMethod); }
/** * Create a CodeGenerator parameter * * @param string $name * @param null|string $type * @param null|bool $reference * * @return Zend_CodeGenerator_Php_Parameter */ public static function createParam($name, $type = null, $reference = null) { $param = new Zend_CodeGenerator_Php_Parameter(); $param->setName($name); if (!empty($type)) { $param->setType($type); } if ($reference === true) { $param->setPassedByReference(true); } return $param; }