/** * fromReflection() - build a Code Generation PHP Object from a Class Reflection * * @param Zend_Reflection_Class $reflectionClass * @return dmZendCodeGeneratorPhpClass */ public static function fromReflection(Zend_Reflection_Class $reflectionClass) { $class = new self(); $class->setSourceContent($class->getSourceContent()); $class->setSourceDirty(false); if ($reflectionClass->getDocComment() != '') { $class->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionClass->getDocblock())); } $class->setAbstract($reflectionClass->isAbstract()); $class->setName($reflectionClass->getName()); if ($parentClass = $reflectionClass->getParentClass()) { $class->setExtendedClass($parentClass->getName()); $interfaces = array_diff($parentClass->getInterfaces(), $reflectionClass->getInterfaces()); } else { $interfaces = $reflectionClass->getInterfaces(); } $class->setImplementedInterfaces($interfaces); $properties = array(); foreach ($reflectionClass->getProperties() as $reflectionProperty) { if ($reflectionProperty->getDeclaringClass()->getName() == $class->getName()) { $properties[] = Zend_CodeGenerator_Php_Property::fromReflection($reflectionProperty); } } $class->setProperties($properties); $methods = array(); foreach ($reflectionClass->getMethods(-1, 'dmZendReflectionMethod') as $reflectionMethod) { if ($reflectionMethod->getDeclaringClass()->getName() == $class->getName()) { $methods[] = dmZendCodeGeneratorPhpMethod::fromReflection($reflectionMethod); } } $class->setMethods($methods); return $class; }
public function testPropertyReturns() { $reflectionClass = new Zend_Reflection_Class('Zend_Reflection_TestSampleClass2'); $propertyByName = $reflectionClass->getProperty('_prop1'); $this->assertEquals('Zend_Reflection_Property', get_class($propertyByName)); $propertiesAll = $reflectionClass->getProperties(); $this->assertEquals(2, count($propertiesAll)); $firstProperty = array_shift($propertiesAll); $this->assertEquals('_prop1', $firstProperty->getName()); }
protected function _getProperties() { $propertyArray = array(); $class = new Zend_Reflection_Class($this); $properties = $class->getProperties(); foreach ($properties as $property) { if ($property->isPublic()) { $propertyArray[] = $property->getName(); } } return $propertyArray; }
public function InjectDependencies($object) { $reflectionClass = new \Zend_Reflection_Class($object); //$reflectionProperty = new \Zend_Reflection_Property(null, null); foreach ($reflectionClass->getProperties() as $reflectionProperty) { /** @var \Zend_Reflection_Property $reflectionProperty */ $reflectionDocComment = $reflectionProperty->getDocComment(); if ($reflectionDocComment) { if ($reflectionDocComment->hasTag("Inject")) { $reflectionDocCommentTag = $reflectionDocComment->getTag("Inject"); $dependencyName = $reflectionDocCommentTag->getDescription(); $dependency = $this->kernel->Get($dependencyName); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, $dependency); } } } //print_r($reflectionClass); }
/** * Takes care of injecting controller dependencies * into the controller at runtime. */ public function preDispatch() { $actionController = $this->getActionController(); $r = new Zend_Reflection_Class($actionController); $properties = $r->getProperties(); foreach ($properties as $property) { if ($property->getDeclaringClass()->getName() == get_class($actionController)) { if ($property->getDocComment() && $property->getDocComment()->hasTag('InjectService')) { $tag = $property->getDocComment()->getTag('InjectService'); if ($tag->getDescription()) { $sc = Zend_Registry::get('sc'); $service = $sc->getService(trim(lcfirst($tag->getDescription()))); $property->setAccessible(true); $property->setValue($actionController, $service); } else { throw new Exception("No service key given"); } } } } }
/** * Check for dependencies and inject them if needed. */ protected function setUp() { parent::setUp(); if (Zend_Registry::isRegistered(LoSo_Zend_Application_Bootstrap_SymfonyContainerBootstrap::getRegistryIndex()) && ($container = Zend_Registry::get(LoSo_Zend_Application_Bootstrap_SymfonyContainerBootstrap::getRegistryIndex())) instanceof \Symfony\Component\DependencyInjection\ContainerInterface) { $r = new Zend_Reflection_Class($this); $properties = $r->getProperties(); foreach ($properties as $property) { if ($property->getDocComment() && $property->getDocComment()->hasTag('Inject')) { $injectTag = $property->getDocComment()->getTag('Inject'); $serviceName = $injectTag->getDescription(); if (empty($serviceName)) { $serviceName = $this->_formatServiceName($property->getName()); } if ($container->has($serviceName)) { $property->setAccessible(true); $property->setValue($this, $container->get($serviceName)); } } } } }
/** * Method scan given object for properties which has public getters * and generate array of entities-replacements pairs from this method * @param $object Object * @param $namespace Custom namespace for replacements * @return Tools_Content_EntityParser Return self for chaining * @throws Exceptions_SeotoasterException */ public function objectToDictionary($object, $namespace = null) { if (!is_object($object)) { throw new Exceptions_SeotoasterException('Given variable must be an object'); } $reflection = new Zend_Reflection_Class($object); $dictionary = array(); foreach ($reflection->getProperties() as $prop) { $normalizedPropName = join('', array_map('ucfirst', explode('_', $prop->getName()))); $getter = 'get' . join('', array_map('ucfirst', explode('_', $prop->getName()))); if ($reflection->hasMethod($getter)) { $replacement = $object->{$getter}(); $className = empty($namespace) ? preg_replace('/.*_([\\w\\d]*)$/', '$1', $reflection->getName()) : $namespace; $entityName = strtolower($className . ':' . $normalizedPropName); if (!is_array($replacement) && !is_object($replacement)) { $dictionary[$entityName] = $replacement; } } } $this->addToDictionary($dictionary); return $this; }
/** * Generate map of public class attributes * * @param string $typename type name * @param DOMElement $typexml target XML element * @return void */ protected function _addClassAttributes($typename, DOMElement $typexml) { // Do not try to autoload here because _phpTypeToAS should // have already attempted to load this class if (!class_exists($typename, false)) { return; } $rc = new Zend_Reflection_Class($typename); foreach ($rc->getProperties() as $prop) { if (!$prop->isPublic()) { continue; } $propxml = $this->_xml->createElement('property'); $propxml->setAttribute('name', $prop->getName()); $type = $this->_registerType($this->_getPropertyType($prop)); $propxml->setAttribute('type', $type); $typexml->appendChild($propxml); } }
protected function _getClassAnnotations($class) { $annotations = array(); // TODO: Go up to parent classes (let subclasses override tags from parent classes) $reflectionClass = new Zend_Reflection_Class($class); foreach ($reflectionClass->getProperties() as $property) { $docblock = $property->getDocComment(); if ($docblock) { $tags = $docblock->getTags('firephp'); if ($tags) { foreach ($tags as $tag) { list($name, $value) = $this->_parseAnnotationTag($tag); $annotations['$' . $property->getName()][$name] = $value; } } } } return $annotations; }
protected function _getClassAnnotations($class) { $annotations = array(); // TODO: Go up to parent classes (let subclasses override tags from parent classes) try { $reflectionClass = new Zend_Reflection_Class($class); foreach ($reflectionClass->getProperties() as $property) { $docblock = $property->getDocComment(); if ($docblock) { $tags = $docblock->getTags('insight'); if ($tags) { foreach ($tags as $tag) { list($name, $value) = $this->_parseAnnotationTag($tag); $annotations['$' . $property->getName()][$name] = $value; } } } } } catch (Exception $e) { // silence errors (Zend_Reflection_Docblock_Tag throws if '@name(..)' tag found) // TODO: Optionally show these errors } return $annotations; }