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.
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()
}
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()
}
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()
}
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.
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()
}
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()
}
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()
}
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()
}
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()
}
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)
}
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()
}
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.
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()
}