Zend_CodeGenerator Réference
Classes abstraites et interfaces
Zend_CodeGenerator_Abstract
La classe de base de CodeGenerator dont toutes les classes héritent. Elle
propose l'API suivante :
Le constructeur appelle _init() (restée vide, à écrire
dans les classes concrètes), puis passe le paramètre $options à
setOptions(), et enfin appelle
_prepare() (encore une
fois, vide, à écrire dans les classes concrètes).
Comme partout dans Zend Framework, setOptions() compare les
clés du tableau passé comme paramètre à des setters de la classe, et passe donc la
valeur à la bonne méthode si trouvée.
__toString() est marquée final, et proxie vers
generate().
setSourceContent() et
getSourceContent() permettent
soit de définir le contenu par défaut soit de remplacer ce contenu par la tâche de
génération.
Zend_CodeGenerator_Php_Abstract
Zend_CodeGenerator_Php_Abstract étend
Zend_CodeGenerator_Abstract et ajoute des méthodes permettant
de savoir si le contenu a changé et aussi le nombre d'indentation à utiliser avant
chaque ligne de code à générer. L'API est la suivante :
Zend_CodeGenerator_Php_Member_Abstract
Zend_CodeGenerator_Php_Member_Abstract est une classe
de base pour générer des propriétés ou des méthodes de classe, et propose des
accesseurs et des mutateurs pour créer la visibilité, l'abstraction, la staticité ou
la finalité. L'API est la suivante :
Classes CodeGenerator concrêtes
Zend_CodeGenerator_Php_Body
Zend_CodeGenerator_Php_Body est utilisée pour générer
du code procédural à inclure dans un fichier. Vous passez
donc simplement du contenu à cet objet, qui vous le ressortira une fois son
generate() appelé.
L'API de cette classe est comme suit :
Zend_CodeGenerator_Php_Class
Zend_CodeGenerator_Php_Class est utilisée pour générer
du code de classes PHP. Les fonctions de bases génèrent la
classe PHP elle-même, ainsi que ses commentaires
PHP DocBlock. Vous pouvez bien sûr spécifier
la classe comme abstraite, finale, ou encore lui rajouter des
constantes / attributs / méthodes sous
forme d'autres objets décrits eux aussi dans ce chapitre.
Voici l'API :
La méthode setProperty() accepte soit un tableau qui peut
être utilisé pour générer une instance de
Zend_CodeGenerator_Php_Property, soit directement une
instance de Zend_CodeGenerator_Php_Property.
setMethod() se manipule de la même manière, et utilise une
instance de Zend_CodeGenerator_Php_Method.
A noter que setDocBlock() attend une instance de
Zend_CodeGenerator_Php_DocBlock.
Zend_CodeGenerator_Php_Docblock
Zend_CodeGenerator_Php_Docblock est utilisée pour
générer des éléments PHP arbitraire, y compris les commentaires
de description longs ou courts.
Les tags annotation doivent être spécifiés via setTag() ou
setTags() qui prennent en paramètre un objet
Zend_CodeGenerator_Php_Docblock_Tag ou un tableau qui
permettra sa construction.
Voici l'API :
Zend_CodeGenerator_Php_Docblock_Tag
Zend_CodeGenerator_Php_Docblock_Tag est utilisée pour
créer des balises d'annotation PHP DocBlck. Les balises doivent
posséder un nom (la partie qui suit immédiatement le '@') et une description
(ce qui suit le tag).
Voici l'API :
Zend_CodeGenerator_Php_DocBlock_Tag_Param
Zend_CodeGenerator_Php_DocBlock_Tag_Param est une
version spéciale de Zend_CodeGenerator_Php_DocBlock_Tag, et
permet de représenter un paramètre d'une méthode. Le nom de la balise est donc
connu, mais des informations additionnelles sont requises : le nom du
paramètre et le type de données qu'il représente.
L'API de cette classe est la suivante :
Zend_CodeGenerator_Php_DocBlock_Tag_Return
Zend_CodeGenerator_Php_Docblock_Tab_Return est une
variante qui permet de modéliser la valeur de retour d'une méthode. Dans ce cas, le
nom de la balise est connu ('return') mais pas le type de retour.
Voici l'API :
Zend_CodeGenerator_Php_File
Zend_CodeGenerator_Php_File est utilisée pour générer
le contenu complet d'un fichier PHP. Le fichier peut contenir
des classes, du code PHP ou encore des commentaires PHPDoc.
Pour ajouter des classes, vous devrez soit passer un tableau d'informations à
passer au constructeur de Zend_CodeGenerator_Php_Class, soit
un objet de cette dernière classe directement. Idem concernant les commentaires
PHPDoc et la classe Zend_CodeGenerator_Php_Docblock
Voici l'API de la classe :
Zend_CodeGenerator_Php_Member_Container
Zend_CodeGenerator_Php_Member_Container est utilisée en
interne par Zend_CodeGenerator_Php_Class pour garder une
trace des attributs et des méthodes de classe. Ceux-ci sont indéxés par nom.
Voici l'API de cette classe :
Zend_CodeGenerator_Php_Method
Zend_CodeGenerator_Php_Method est utilisée pour décrire
une méthode d'une classe, et va générer son code, et ses éventuels commentaires
PHPDoc. La visibilité et le statut (abstraite, finale, statique) peuvent être
spécifiées par la classe parente
Zend_CodeGenerator_Php_Member_Abstract. Enfin, il est aussi
possible de spécifier les paramètres de la méthodes, et sa valeur de retour.
Les paramètres peuvent être indiqués via setParameter() ou
setParameters() qui acceptent soit des tableaux décrivant
les paramètres à passer au constructeur
deZend_CodeGenerator_Php_Parameter, soit des objets de cette
dernière classe.
L'API de cette classe est la suivante :
Zend_CodeGenerator_Php_Parameter
Zend_CodeGenerator_Php_Parameter est utilisée pour
décrire un paramètre de méthode. Chacun doit avoir une position (sinon l'ordre de
leur enregistrement sera utilisé par défaut), une valeur par défaut, un type et
enfin un nom.
Voici l'API :
Plusieurs problèmes peuvent apparaître lorsque l'on veut paramétrer un
NULL, un booléen ou un tableau en tant que valeur par
défaut. Pour ceci le conteneur
Zend_CodeGenerator_Php_ParameterDefaultValue peut être
utilisé, par exemple :
setDefaultValue(
new Zend_CodeGenerator_Php_Parameter_DefaultValue("null")
);
$parameter->setDefaultValue(
new Zend_CodeGenerator_Php_Parameter_DefaultValue("array('foo', 'bar')")
);
]]>
En interne setDefaultValue() convertit aussi les valeurs
qui peuvent être exprimées en PHP dans le conteneur.
Zend_CodeGenerator_Php_Property
Zend_CodeGenerator_Php_Property est utilisée pour
décrire une propriété, nous entendons par là une variable ou
une constante. Une valeur par défaut peut alors être
spécifiée. La visibilité de la propriété peut être définie par la classe parente,
Zend_CodeGenerator_Php_Member_Abstract.
Voici l'API :