TigerZF
🌐Español

20.3. Referencia de Zend_CodeGenerator

20.3.1. Clases abstractas e interfaces

20.3.1.1. Zend_CodeGenerator_Abstract

La clase base de la que heredan todas las clases de CodeGenerator proporciona la funcionalidad mínima necesaria. Su API es la siguiente:

abstract class Zend_CodeGenerator_Abstract
{
    final public function __construct(Array $options = array())
    public function setOptions(Array $options)
    public function setSourceContent($sourceContent)
    public function getSourceContent()
    protected function _init()
    protected function _prepare()
    abstract public function generate();
    final public function __toString()
}

El constructor primero llama a _init() (que se deja vacío para que la clase concreta que extienda la implemente), luego pasa el parámetro $options a setOptions(), y finalmente llama a _prepare() (de nuevo, para ser implementado por una clase que extienda).

Como la mayoría de las clases en Zend Framework, setOptions() compara una clave de opción con los setters existentes en la clase, y pasa el valor a ese método si se encuentra.

__toString() está marcado como final, y delega en generate().

setSourceContent() y getSourceContent() están pensados para establecer el contenido por defecto del código que se está generando, o para reemplazar dicho contenido una vez que todas las tareas de generación se hayan completado.

20.3.1.2. Zend_CodeGenerator_Php_Abstract

Zend_CodeGenerator_Php_Abstract extiende Zend_CodeGenerator_Abstract, y añade algunas propiedades para rastrear si el contenido ha cambiado, así como la cantidad de sangría que debe aparecer antes del contenido generado. Su API es la siguiente:

abstract class Zend_CodeGenerator_Php_Abstract
    extends Zend_CodeGenerator_Abstract
{
    public function setSourceDirty($isSourceDirty = true)
    public function isSourceDirty()
    public function setIndentation($indentation)
    public function getIndentation()
}

20.3.1.3. Zend_CodeGenerator_Php_Member_Abstract

Zend_CodeGenerator_Php_Member_Abstract es una clase base para generar miembros de clase -- propiedades y métodos -- y proporciona accesores y mutadores para establecer la visibilidad; si el miembro es abstracto, estático o final; y el nombre del miembro. Su API es la siguiente:

abstract class Zend_CodeGenerator_Php_Member_Abstract
    extends Zend_CodeGenerator_Php_Abstract
{
    public function setAbstract($isAbstract)
    public function isAbstract()
    public function setStatic($isStatic)
    public function isStatic()
    public function setVisibility($visibility)
    public function getVisibility()
    public function setName($name)
    public function getName()
}

20.3.2. Clases concretas de CodeGenerator

20.3.2.1. Zend_CodeGenerator_Php_Body

Zend_CodeGenerator_Php_Body está pensado para generar código procedural arbitrario para incluir en un archivo. Como tal, simplemente se establece el contenido para el objeto, y este devolverá dicho contenido al invocar generate().

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Body extends Zend_CodeGenerator_Php_Abstract
{
    public function setContent($content)
    public function getContent()
    public function generate()
}

20.3.2.2. Zend_CodeGenerator_Php_Class

Zend_CodeGenerator_Php_Class está pensado para generar clases PHP. La funcionalidad básica solo genera la clase PHP en sí, así como opcionalmente el DocBlock PHP relacionado. Las clases pueden implementar o heredar de otras clases, y pueden marcarse como abstractas. Utilizando otras clases generadoras de código, también se pueden asociar constantes de clase, propiedades y métodos.

El API es el siguiente:

class Zend_CodeGenerator_Php_Class extends Zend_CodeGenerator_Php_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Class $reflectionClass
    )
    public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
    public function getDocblock()
    public function setName($name)
    public function getName()
    public function setAbstract($isAbstract)
    public function isAbstract()
    public function setExtendedClass($extendedClass)
    public function getExtendedClass()
    public function setImplementedInterfaces(Array $implementedInterfaces)
    public function getImplementedInterfaces()
    public function setProperties(Array $properties)
    public function setProperty($property)
    public function getProperties()
    public function getProperty($propertyName)
    public function setMethods(Array $methods)
    public function setMethod($method)
    public function getMethods()
    public function getMethod($methodName)
    public function hasMethod($methodName)
    public function isSourceDirty()
    public function generate()
}

El método setProperty() acepta un array de información que puede utilizarse para generar una instancia de Zend_CodeGenerator_Php_Property -- o simplemente una instancia de Zend_CodeGenerator_Php_Property. De igual forma, setMethod() acepta o bien un array de información para generar una instancia de Zend_CodeGenerator_Php_Method o una instancia concreta de esa clase.

Tenga en cuenta que setDocBlock() espera una instancia de Zend_CodeGenerator_Php_DocBlock.

20.3.2.3. Zend_CodeGenerator_Php_Docblock

Zend_CodeGenerator_Php_Docblock puede utilizarse para generar docblocks PHP arbitrarios, incluyendo todas las características estándar de los docblocks: descripciones cortas y largas, y etiquetas de anotación.

Las etiquetas de anotación pueden establecerse mediante los métodos setTag() y setTags(); cada uno de ellos acepta ya sea un array que describe la etiqueta y que puede pasarse al constructor de Zend_CodeGenerator_Php_Docblock_Tag, o una instancia de esa clase.

El API es el siguiente:

class Zend_CodeGenerator_Php_Docblock extends Zend_CodeGenerator_Php_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Docblock $reflectionDocblock
    )
    public function setShortDescription($shortDescription)
    public function getShortDescription()
    public function setLongDescription($longDescription)
    public function getLongDescription()
    public function setTags(Array $tags)
    public function setTag($tag)
    public function getTags()
    public function generate()
}

20.3.2.4. Zend_CodeGenerator_Php_Docblock_Tag

Zend_CodeGenerator_Php_Docblock_Tag está pensado para crear etiquetas de anotación arbitrarias para incluir en docblocks PHP. Se espera que las etiquetas contengan un nombre (la parte inmediatamente después del símbolo '@') y una descripción (todo lo que sigue al nombre de la etiqueta).

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Docblock_Tag
    extends Zend_CodeGenerator_Php_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Docblock_Tag $reflectionTag
    )
    public function setName($name)
    public function getName()
    public function setDescription($description)
    public function getDescription()
    public function generate()
}

20.3.2.5. Zend_CodeGenerator_Php_DocBlock_Tag_Param

Zend_CodeGenerator_Php_DocBlock_Tag_Param es una versión especializada de Zend_CodeGenerator_Php_DocBlock_Tag, y representa un parámetro de método. Por tanto, el nombre de la etiqueta ya se conoce ("param"), pero debido al formato de esta etiqueta de anotación, se requiere información adicional para generarla: el nombre del parámetro y el tipo de dato que representa.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Docblock_Tag_Param
    extends Zend_CodeGenerator_Php_Docblock_Tag
{
    public static function fromReflection(
        Zend_Reflection_Docblock_Tag $reflectionTagParam
    )
    public function setDatatype($datatype)
    public function getDatatype()
    public function setParamName($paramName)
    public function getParamName()
    public function generate()
}

20.3.2.6. Zend_CodeGenerator_Php_DocBlock_Tag_Return

Al igual que la variante de etiqueta docblock param, Zend_CodeGenerator_Php_Docblock_Tab_Return es una variante de etiqueta de anotación para representar un valor de retorno de método. En este caso, el nombre de la etiqueta de anotación ya se conoce ("return"), pero requiere un tipo de retorno.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Docblock_Tag_Param
    extends Zend_CodeGenerator_Php_Docblock_Tag
{
    public static function fromReflection(
        Zend_Reflection_Docblock_Tag $reflectionTagReturn
    )
    public function setDatatype($datatype)
    public function getDatatype()
    public function generate()
}

20.3.2.7. Zend_CodeGenerator_Php_File

Zend_CodeGenerator_Php_File se utiliza para generar el contenido completo de un archivo que contendrá código PHP. El archivo puede contener clases o código PHP arbitrario, así como un docblock a nivel de archivo si se desea.

Al añadir clases al archivo, será necesario pasar ya sea un array de información al constructor de Zend_CodeGenerator_Php_Class, o una instancia de esa clase. De forma similar, con los docblocks, será necesario pasar información para que la consuma el constructor de Zend_CodeGenerator_Php_Docblock o una instancia de la clase.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_File extends Zend_CodeGenerator_Php_Abstract
{
    public static function fromReflectedFilePath(
        $filePath,
        $usePreviousCodeGeneratorIfItExists = true,
        $includeIfNotAlreadyIncluded = true)
    public static function fromReflection(Zend_Reflection_File $reflectionFile)
    public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
    public function getDocblock()
    public function setRequiredFiles($requiredFiles)
    public function getRequiredFiles()
    public function setClasses(Array $classes)
    public function getClass($name = null)
    public function setClass($class)
    public function setFilename($filename)
    public function getFilename()
    public function getClasses()
    public function setBody($body)
    public function getBody()
    public function isSourceDirty()
    public function generate()
}

20.3.2.8. Zend_CodeGenerator_Php_Member_Container

Zend_CodeGenerator_Php_Member_Container se utiliza internamente por Zend_CodeGenerator_Php_Class para llevar registro de los miembros de la clase -- tanto propiedades como métodos. Estos se indexan por nombre, utilizando las instancias concretas de los miembros como valores.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Member_Container extends ArrayObject
{
    public function __construct($type = self::TYPE_PROPERTY)
}

20.3.2.9. Zend_CodeGenerator_Php_Method

Zend_CodeGenerator_Php_Method describe un método de clase, y puede generar tanto el código como el docblock del método. La visibilidad y el estado de estático, abstracto o final pueden indicarse, según su clase padre, Zend_CodeGenerator_Php_Member_Abstract. Finalmente, los parámetros y el valor de retorno del método pueden especificarse.

Los parámetros pueden establecerse mediante setParameter() o setParameters(). En cada caso, un parámetro debe ser ya sea un array de información para pasar al constructor de Zend_CodeGenerator_Php_Parameter o una instancia de esa clase.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Method
    extends Zend_CodeGenerator_Php_Member_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Method $reflectionMethod
    )
    public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
    public function getDocblock()
    public function setFinal($isFinal)
    public function setParameters(Array $parameters)
    public function setParameter($parameter)
    public function getParameters()
    public function setBody($body)
    public function getBody()
    public function generate()
}

20.3.2.10. Zend_CodeGenerator_Php_Parameter

Zend_CodeGenerator_Php_Parameter puede utilizarse para especificar parámetros de método. Cada parámetro puede tener una posición (si no se especifica, se utilizará el orden en que se registran con el método), un valor por defecto y un tipo de dato; un nombre de parámetro es obligatorio.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Parameter extends Zend_CodeGenerator_Php_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Parameter $reflectionParameter
    )
    public function setType($type)
    public function getType()
    public function setName($name)
    public function getName()
    public function setDefaultValue($defaultValue)
    public function getDefaultValue()
    public function setPosition($position)
    public function getPosition()
    public function getPassedByReference()
    public function setPassedByReference($passedByReference)
    public function generate()
}

Pueden ocurrir varios problemas al intentar establecer NULL, booleanos o arrays como valores por defecto. Para esto, puede utilizarse el objeto contenedor de valores Zend_CodeGenerator_Php_ParameterDefaultValue, por ejemplo:

$parameter = new Zend_CodeGenerator_Php_Parameter();
$parameter->setDefaultValue(
    new Zend_CodeGenerator_Php_Parameter_DefaultValue("null")
);
$parameter->setDefaultValue(
    new Zend_CodeGenerator_Php_Parameter_DefaultValue("array('foo', 'bar')")
);

Internamente, setDefaultValue() también convierte los valores que no pueden expresarse en PHP en el objeto contenedor de valores.

20.3.2.11. Zend_CodeGenerator_Php_Property

Zend_CodeGenerator_Php_Property describe una propiedad de clase, que puede ser una constante o una variable. En cada caso, la propiedad puede tener un valor por defecto opcional asociado a ella. Además, la visibilidad de las propiedades de tipo variable puede establecerse, según la clase padre, Zend_CodeGenerator_Php_Member_Abstract.

El API de la clase es el siguiente:

class Zend_CodeGenerator_Php_Property
    extends Zend_CodeGenerator_Php_Member_Abstract
{
    public static function fromReflection(
        Zend_Reflection_Property $reflectionProperty
    )
    public function setConst($const)
    public function isConst()
    public function setDefaultValue($defaultValue)
    public function getDefaultValue()
    public function generate()
}