addProperty() public method

Adds a property to the definition
public addProperty ( ClassProperty $property )
$property ClassProperty
コード例 #1
0
ファイル: CompilerFile.php プロジェクト: phalcon/zephir
 /**
  * Creates a definition for a class
  *
  * @param CompilationContext $compilationContext
  * @param string $namespace
  * @param array $topStatement
  * @param array $docblock
  */
 public function preCompileClass(CompilationContext $compilationContext, $namespace, $topStatement, $docblock)
 {
     $classDefinition = new ClassDefinition($namespace, $topStatement['name']);
     $classDefinition->setIsExternal($this->_external);
     if (isset($topStatement['extends'])) {
         $classDefinition->setExtendsClass($this->getFullName($topStatement['extends']));
     }
     if (isset($topStatement['implements'])) {
         foreach ($topStatement['implements'] as &$implement) {
             $implement['value'] = $this->getFullName($implement['value']);
         }
         $classDefinition->setImplementsInterfaces($topStatement['implements']);
     }
     if (isset($topStatement['abstract'])) {
         $classDefinition->setIsAbstract($topStatement['abstract']);
     }
     if (isset($topStatement['final'])) {
         $classDefinition->setIsFinal($topStatement['final']);
     }
     if (is_array($docblock)) {
         $classDefinition->setDocBlock($docblock["value"]);
     }
     if (isset($topStatement['definition'])) {
         $definition = $topStatement['definition'];
         if (isset($definition['properties'])) {
             foreach ($definition['properties'] as $property) {
                 /**
                  * Add property to the definition
                  */
                 $classDefinition->addProperty(new ClassProperty($classDefinition, $property['visibility'], $property['name'], isset($property['default']) ? $property['default'] : null, isset($property['docblock']) ? $property['docblock'] : null, $property));
                 /**
                  * Check and process shortcuts
                  */
                 if (isset($property['shortcuts'])) {
                     $this->_processShorcuts($property, $classDefinition);
                 }
             }
         }
         /**
          * Register constants
          */
         if (isset($definition['constants'])) {
             foreach ($definition['constants'] as $constant) {
                 $classDefinition->addConstant(new ClassConstant($constant['name'], isset($constant['default']) ? $constant['default'] : null, isset($constant['docblock']) ? $constant['docblock'] : null));
             }
         }
         /**
          * Register methods
          */
         if (isset($definition['methods'])) {
             foreach ($definition['methods'] as $method) {
                 $classDefinition->addMethod(new ClassMethod($classDefinition, $method['visibility'], $method['name'], isset($method['parameters']) ? new ClassMethodParameters($method['parameters']) : null, isset($method['statements']) ? new StatementsBlock($method['statements']) : null, isset($method['docblock']) ? $method['docblock'] : null, isset($method['return-type']) ? $method['return-type'] : null, $method), $method);
             }
         }
     }
     $this->_classDefinition = $classDefinition;
     /**
      * Assign current class definition to the compilation context
      */
     $compilationContext->classDefinition = $classDefinition;
     /**
      * Run pre-compilation passes
      */
     $classDefinition->preCompile($compilationContext);
 }
コード例 #2
0
ファイル: ClassDefinition.php プロジェクト: zhao5908/zephir
 /**
  * Builds a class definition from reflection
  *
  * @param \ReflectionClass $class
  *
  * @return ClassDefinition
  */
 public static function buildFromReflection(\ReflectionClass $class)
 {
     $classDefinition = new ClassDefinition($class->getNamespaceName(), $class->getName());
     $methods = $class->getMethods();
     if (count($methods) > 0) {
         foreach ($methods as $method) {
             $parameters = array();
             foreach ($method->getParameters() as $row) {
                 $params = array('type' => 'parameter', 'name' => $row->getName(), 'const' => 0, 'data-type' => 'variable', 'mandatory' => !$row->isOptional());
                 if (!$params['mandatory']) {
                     try {
                         $params['default'] = $row->getDefaultValue();
                     } catch (\ReflectionException $e) {
                         // TODO: dummy default value
                         $params['default'] = true;
                     }
                 }
                 $parameters[] = $params;
             }
             $classMethod = new ClassMethod($classDefinition, array(), $method->getName(), new ClassMethodParameters($parameters));
             $classMethod->setIsStatic($method->isStatic());
             $classMethod->setIsBundled(true);
             $classDefinition->addMethod($classMethod);
         }
     }
     $constants = $class->getConstants();
     if (count($constants) > 0) {
         foreach ($constants as $constantName => $constantValue) {
             $type = self::_convertPhpConstantType(gettype($constantValue));
             $classConstant = new ClassConstant($constantName, array('value' => $constantValue, 'type' => $type), null);
             $classDefinition->addConstant($classConstant);
         }
     }
     $properties = $class->getProperties();
     if (count($properties) > 0) {
         foreach ($properties as $property) {
             $visibility = array();
             if ($property->isPublic()) {
                 $visibility[] = 'public';
             }
             if ($property->isPrivate()) {
                 $visibility[] = 'private';
             }
             if ($property->isProtected()) {
                 $visibility[] = 'protected';
             }
             if ($property->isStatic()) {
                 $visibility[] = 'static';
             }
             $classProperty = new ClassProperty($classDefinition, $visibility, $property->getName(), null, null, null);
             $classDefinition->addProperty($classProperty);
         }
     }
     $classDefinition->setIsBundled(true);
     return $classDefinition;
 }