Accueil > > > [PHP5] CLASSE DE DOCUMENTATION DE CLASSES ET DE FONCTIONS
[PHP5] CLASSE DE DOCUMENTATION DE CLASSES ET DE FONCTIONS
Information sur la source
Description
CREDITS A very special thanks to Bastian Gorke for his contribution, he added the German translation! Thanks a lot, Bastian! :-) Un grand merci à Bastian Gorke pour sa contribution, il a ajouté la traduction en allemand! Merci beaucoup, Bastian! :-) README Ce script est un script de documentation de classes et de fonctions. L'utilisation est très simple : CLASSES : Leur analyse fonctionne par package. Un formulaire sert à créer un package. Un autre sert à uploader des classes dans un package. Si vous avez des classes héritant d'autres classes, vous devez uploader ces classes parentes dans le package. Un 3ème forumaire, enfin, sert à analyser le package complet. Une documentation sera créée, avec un index propre au package, contenant le diagramme d'héritages du package. FONCTIONS : Un formulaire sert à uploader le fichier de fonction, un autre à analyser les fichiers uploadés. Seules les fonctions 'user_defined' seront analysées. Une collection de fichiers html sont alors créés, facilement transportable dans un autre script donc on veut documenter les classes ou/et fonctions. A noter que l'on peut analyser n'importe quelle classe, y compris une classe interne. La documentation est localisée. Pour le moment, sont supportés l'anglais, le français et l'allemand. Il est très facile de créer une traduction : il suffit de rajouter une langue dans les fichiers xml qui se trouvent dans le répertoire 'locales'. J'ai mis dans le répertoire css/ différentes css, pour montrer que le design est très facilement modifable. Il suffit pour cela de nommer la css voulue "maindoc.css". index.php passe par l'interface utilisateur index2.php montre comment ne pas passer par cette interface (il faut au prélable mettre les classes à documenter dans le répertoire 'classes') REPERTOIRES : class/ => contient les classes faisant fonctionner le script : odocclass.cls.php, odocfunc.cls.php, olocale.cls.php et ohtml.cls.php classes/ => contient les classes à analyser fonctions/ => contient les fichiers de fonctions à analyser css/ => contient la css de la documentation docs/"langue"/"package"/classes/ et docs/"langue"/fonctions/ => lorsque une classe ou une fonction est analysée, ce répertoire est créé, ainsi qu'un sous-répertoire du nom de la classe/fonction étudiée. Dans ce sous-répertoire se trouvent les fichiers html de la documentation locales/ => contient les fichiers xml de localisation This script is a classes and functions documentation tool. It's easy to use : CLASSES : Their analysis is based on packages. A first form is used to create a package name. A second one is used to upload classes in the package. If you have inherited classes, you MUST upload these parent classes in the package, too. A thirs form, finally, is used to analyze a chosen package. The documentation is then created, with an index page for the package, displaying a diagram for the classes hierarchy. FONCTIONS : A first form is used to upload the functions files, and a second one to analyze the chosen file. HTML files are then created, you can easily move wherever you want to give access to the documentation. The documentation tool is localized : up to now, only English, French and German are supported. But it is very easy to create a new language : you just have to translate all the xml files located in the folder 'locales'. Then, just add the nez language button in the file 'localize.form.html'. I have put in the 'css' folder various css. The one used will be the one named 'maindoc.css'. You can create yours quite easily. FOLDERS : class/ => here are the tool classes : odocclass.cls.php, odocfunc.cls.php, olocale.cls.php and ohtml.cls.php classes/ => here are the uploaded classes to be analyzed fonctions/ => here are the uploaded functions files to be analized css/ => here are the css files (maindoc.css being the one currently used) docs/'language_name'/"package_name"/classes and docs/'language_name'/fonctions => here are the html documentation files locales/ => here are the xml translation files
Source
- <?php
- /**
- * CLASS odocclass
- * classe de documentation de classes
- * @auteur : johan <barbier_johan@hotmail.com>
- * @version : 2.4
- * @date : 2006/02/10
- *
- * free to use, modify, please just tell me if you make any changes :-)
- */
- class odocclass extends ReflectionClass {
-
- /**
- * propriété qui contiendra l'objet olocale pour la localisation
- */
- private $oloc;
- /**
- * tableau des propriétés générales
- */
- private $aGeneral = array ();
- /**
- * tableau des propriétés des méthodes
- */
- private $aMethods = array ();
- /**
- * tableau des propriétés des propriétés
- */
- private $aProperties = array ();
- /**
-
- /**
- * tableau buffer des lignes des fichiers codes
- */
- private $fileBuf = array ();
-
- /**
- * tableau des classes et de leurs enfants d'un package
- */
- private $aChild = array ();
-
- /**
- * chaîne qui contiendra le nom du package
- */
- private $package = '';
-
- /**
- * constructeur
- * @Params string className : nom de la classe à analyser
- * @Params string child : nom de la classe fille appelante, héritant de la classe courante
- */
- public function __construct ($package, array $aArbo) {
- $this -> oloc = new olocale ($_SESSION['locale']);
- $this -> package = $package;
- $this -> aArbo = $aArbo;
- foreach ($this -> aArbo as $className => $dump) {
- $this -> aChild[$className]['children'] = array ();
- foreach ($aArbo as $clef => $val) {
- if ($className === $val['parent']) {
- $this -> aChild[$className]['children'][] = $clef;
- }
- }
- parent::__construct ($className);
- $this -> aGeneral = $this -> getGeneral ();
- $this -> aMethods = $this -> getaMethods ();
- $this -> aProperties = $this -> getaProperties ();
- if (empty ($this -> aGeneral['classe'])) {
- if (empty ($this -> aArbo[$className]['parent'])) {
- $parent = '';
- } else {
- $parent = $this -> aGeneral['classe'] = $this -> aArbo[$className]['parent'];
- $this -> aGeneral['classeType'] = 'interface';
- }
- } else {
- $parent = $this -> aGeneral['classe'];
- }
- $this -> aChild[$className]['parent'] = $parent;
- $this -> buildHtmlClass ();
- }
- $ohtml = new ohtml ($this -> package);
- $ohtml -> setIndexPack ($this -> aChild);
- }
-
- /**
- * méthode privée buildHtmlClass
- * appelle l'objet ohtml pour construire effectivement la doc pour les classes
- */
- private function buildHtmlClass () {
- $ohtml = new ohtml ($this -> package);
- $ohtml -> header ();
- $ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties);
- $ohtml -> setContentGeneral ($this -> aGeneral);
- $ohtml -> footer ();
- $ohtml -> toFileClass ($this -> aGeneral['name'], $this -> aGeneral['name']);
- $ohtml -> freeHtml ();
- foreach ($this -> aMethods as $clef => $val) {
- $ohtml -> header ();
- $ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties, $clef);
- $ohtml -> setContentMethods ($val);
- $ohtml -> footer ();
- $ohtml -> toFileMethProps ($this -> aGeneral['name'], $clef);
- $ohtml -> freeHtml ();
- }
- foreach ($this -> aProperties as $clef => $val) {
- $ohtml -> header ();
- $ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties, $clef);
- $ohtml -> setContentProperties ($val);
- $ohtml -> footer ();
- $ohtml -> toFileMethProps ($this -> aGeneral['name'], $clef);
- $ohtml -> freeHtml ();
- }
- $ohtml -> setIndex ();
- }
-
- /**
- * méthode privée getCode
- * sert à récupérer le code dans un fichier, d'une ligne de départ jusqu'à 1 ligne d'arrivée
- * @Return : string code
- */
-
- private function getCode ($filename, $start, $end) {
- $code = '';
- if (!empty ($filename)) {
- if (!array_key_exists ($filename, $this -> fileBuf)) {
- $this -> fileBuf[$filename] = file ($filename);
- }
- for ($i = $start - 1; $i <= $end; $i++) {
- $code .= $this -> fileBuf[$filename][$i];
- }
- }
- return $code;
- }
-
- /**
- * méthode privée getGeneral
- * sert à remplir le tableau des propriétés générales de la classe à analyser
- * @Return : array aTmp
- */
- private function getGeneral () {
- $aTmp['name'] = $this -> getName ();
- $aTmp['type'] = $this -> isInternal () ? 'internal' : 'user-defined';
- $aTmp['abstract'] = $this -> isAbstract () ? 'abstract' : '';
- $aTmp['interface'] = $this -> isInterface () ? 'interface' : 'class';
- $aTmp['file'] = $this -> getFileName();
- $aTmp['startline'] = $this -> getStartLine();
- $aTmp['endline'] = $this -> getEndLine();
- $aTmp['code'] = utf8_encode ($this -> getCode ($aTmp['file'], $aTmp['startline'], $aTmp['endline']));
- $aTmp['final'] = $this -> isFinal () ? ' final' : '';
- $aTmp['comments'] = method_exists ($this, 'getDocComment')?utf8_encode (htmlentities($this -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version');
- $aTmp['total methods'] = count ($this -> getMethods ());
- $aTmp['total properties'] = count ($this -> getProperties ());
- $parent = $this -> getParentClass();
- if (is_object ($parent)) {
- $name = $parent -> getName ();
- $parentType = $parent -> isInterface ()?'interface':'class';
- } else {
- $name = '';
- $parentType = '';
- }
- $aTmp['classe'] = $name;
- $aTmp['classeType'] = $parentType;
-
- if (!empty ($aTmp)) {
- return $aTmp;
- } else {
- return array ();
- }
- }
-
- /**
- * méthode privée getMethods
- * sert à remplir le tableau des propriétés des méthodes de la classe à analyser
- * @Return : array aTmp
- */
- private function getaMethods () {
- foreach ($this -> getMethods () as $val) {
- $aTmp[$val -> getName ()] = array (
- 'name' => $val->getName (),
- 'type' => $val->isInternal() ? 'internal' : 'user-defined',
- 'abstract' => $val->isAbstract() ? ' abstract' : '',
- 'final' => $val->isFinal() ? ' final' : '',
- 'public' => $val->isPublic() ? ' public' : '',
- 'private' => $val->isPrivate() ? ' private' : '',
- 'protected' => $val->isProtected() ? ' protected' : '',
- 'static' => $val->isStatic() ? ' static' : '',
- 'constructor' => $val->isConstructor()?'constructor':($val -> isDestructor()?'destructor':'regular method'),
- 'file' => $val->getFileName(),
- 'startline' => $val->getStartLine(),
- 'endline' => $val->getEndline(),
- 'code' => utf8_encode ($this -> getCode ($val->getFileName(), $val->getStartLine(), $val->getEndline())),
- 'modifiers' => $val->getModifiers(). ' => '.implode(' ', Reflection::getModifierNames($val->getModifiers())),
- 'comments' => method_exists ($val, 'getDocComment')?utf8_encode (htmlentities($val -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version'),
- 'statics' => $val->getStaticVariables(),
- 'classe' => $val -> getDeclaringClass() -> getName (),
- 'parameters' => $this -> getaParameters ($val -> getParameters())
- );
- $aTmp[$val -> getName ()]['returns'] = $this -> getReturns ($aTmp[$val -> getName ()]['comments']);
- $aTmp[$val -> getName ()]['params'] = $this -> getParams ($aTmp[$val -> getName ()]['comments']);
- }
- if (!empty ($aTmp)) {
- return $aTmp;
- } else {
- return array ();
- }
- }
-
- /**
- * méthode privée getReturns
- * sert à récupérer le code pour la/les valeur/s de retour de la méthode, si elle est documentée
- * @Param string comments : contient une chaîne avec les commentaires de la méthode
- * @Return array aTmp : contient un tableau avec les retours possibles
- */
- private function getReturns ($comments) {
- preg_match_all ('@\@return[s]?+(.+)@im', $comments, $res);
- $aTmp = $res[1];
- return (array)$aTmp;
- }
-
- /**
- * méthode privée getParams
- * sert à récupérer le code pour le/les paramètre/s de la méthode, si elle est documentée
- * @Param string comments : contient une chaîne avec les commentaires de la méthode
- * @Return array aTmp : contient un tableau avec les paramètres possibles
- */
- private function getParams ($comments) {
- preg_match_all ('@\@param[s]?+(.+)@im', $comments, $res);
- $aTmp = $res[1];
- return (array)$aTmp;
- }
-
- /**
- * méthode privée getaParameters
- * sert à remplir le tableau des paramètres des méthodes
- * @Return : array aTmp
- */
- private function getaParameters ($aArgs) {
- $aTmp = array ();
- if (!empty ($aArgs)) {
- foreach ($aArgs as $val) {
- $isArray = true === method_exists ($val, 'isArray')?$val -> isArray():false;
- $aTmp[$val -> getName ()] = array (
- 'name' => $val -> getName (),
- 'reference' => $val -> isPassedByReference()?'&':'',
- 'array' => ($isArray)?'array':'',
- 'optional' => $val -> isOptional()?$this -> oloc -> getMsg ('doc', 'doc_optional'):$this -> oloc -> getMsg ('doc', 'doc_mandatory'),
- 'default' => ($val -> isDefaultValueAvailable())?$val -> getDefaultValue():''
- );
- }
- }
- if (!empty ($aTmp)) {
- return $aTmp;
- } else {
- return array ();
- }
- }
-
- /**
- * méthode privée getGeneral
- * sert à remplir le tableau des propriétés des propriétés de la classe à analyser
- * @Return : array aTmp
- */
- private function getaProperties () {
- foreach ($this -> getProperties () as $val) {
- $aTmp[$val -> getName ()] = array (
- 'name' => $val->getName (),
- 'public' => $val -> isPublic()?'public':'',
- 'private' => $val -> isPrivate()?'private':'',
- 'protected' => $val -> isProtected()?'protected':'',
- 'static' => $val -> isStatic()?'static':'',
- 'default' => $val -> isDefault()?$this -> oloc -> getMsg ('doc', 'doc_yes'):$this -> oloc -> getMsg ('doc', 'doc_no'),
- 'modifiers' => $val->getModifiers(). ' => '.implode(' ', Reflection::getModifierNames($val->getModifiers())),
- 'comments' => method_exists ($val, 'getDocComment')?utf8_encode (htmlentities ($val -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version'),
- 'classe' => $val -> getDeclaringClass() -> getName (),
- 'code' => utf8_encode ($this -> getPropsCode ($val -> getDeclaringClass() -> getFileName (), $val -> getName())),
- );
- $aTmp[$val -> getName ()]['defaultvalue'] = ltrim (strstr ($aTmp[$val -> getName ()]['code'], '='), '=');
- }
- if (!empty ($aTmp)) {
- return $aTmp;
- } else {
- return array ();
- }
- }
-
- /**
- * méthode privée getPropsCode
- * sert à récupérer la portin de code où est définie une propriété donnée
- * @Params string fileName : nom du fichier où est définie la propriété
- * @Params string name : nom de la propriété
- * @Return : string code en cas de succès, false en cas d'échec
- */
- private function getPropsCode ($fileName, $name) {
- if (!empty ($fileName)) {
- if (!array_key_exists ($fileName, $this -> fileBuf)) {
- $this -> fileBuf[$fileName] = file ($fileName);
- }
- $cpt = count ($this -> fileBuf[$fileName]);
- for ($i = 0; $i < $cpt; $i++) {
- if (false !== strpos ($this -> fileBuf[$fileName][$i], $name)) {
- $start = $i;
- break;
- }
- }
- if (isset ($start)) {
- for ($i = $start; $i < $cpt; $i++) {
- if (false !== strpos ($this -> fileBuf[$fileName][$i], ';')) {
- $end = $i;
- break;
- }
- }
- }
- if (isset ($end) && isset ($start)) {
- $code = '';
- for ($i = $start; $i <= $end; $i++) {
- $code .= $this -> fileBuf[$fileName][$i];
- }
- return $code;
- }
- }
- return false;
- }
-
- }
- ?>
<?php
/**
* CLASS odocclass
* classe de documentation de classes
* @auteur : johan <barbier_johan@hotmail.com>
* @version : 2.4
* @date : 2006/02/10
*
* free to use, modify, please just tell me if you make any changes :-)
*/
class odocclass extends ReflectionClass {
/**
* propriété qui contiendra l'objet olocale pour la localisation
*/
private $oloc;
/**
* tableau des propriétés générales
*/
private $aGeneral = array ();
/**
* tableau des propriétés des méthodes
*/
private $aMethods = array ();
/**
* tableau des propriétés des propriétés
*/
private $aProperties = array ();
/**
/**
* tableau buffer des lignes des fichiers codes
*/
private $fileBuf = array ();
/**
* tableau des classes et de leurs enfants d'un package
*/
private $aChild = array ();
/**
* chaîne qui contiendra le nom du package
*/
private $package = '';
/**
* constructeur
* @Params string className : nom de la classe à analyser
* @Params string child : nom de la classe fille appelante, héritant de la classe courante
*/
public function __construct ($package, array $aArbo) {
$this -> oloc = new olocale ($_SESSION['locale']);
$this -> package = $package;
$this -> aArbo = $aArbo;
foreach ($this -> aArbo as $className => $dump) {
$this -> aChild[$className]['children'] = array ();
foreach ($aArbo as $clef => $val) {
if ($className === $val['parent']) {
$this -> aChild[$className]['children'][] = $clef;
}
}
parent::__construct ($className);
$this -> aGeneral = $this -> getGeneral ();
$this -> aMethods = $this -> getaMethods ();
$this -> aProperties = $this -> getaProperties ();
if (empty ($this -> aGeneral['classe'])) {
if (empty ($this -> aArbo[$className]['parent'])) {
$parent = '';
} else {
$parent = $this -> aGeneral['classe'] = $this -> aArbo[$className]['parent'];
$this -> aGeneral['classeType'] = 'interface';
}
} else {
$parent = $this -> aGeneral['classe'];
}
$this -> aChild[$className]['parent'] = $parent;
$this -> buildHtmlClass ();
}
$ohtml = new ohtml ($this -> package);
$ohtml -> setIndexPack ($this -> aChild);
}
/**
* méthode privée buildHtmlClass
* appelle l'objet ohtml pour construire effectivement la doc pour les classes
*/
private function buildHtmlClass () {
$ohtml = new ohtml ($this -> package);
$ohtml -> header ();
$ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties);
$ohtml -> setContentGeneral ($this -> aGeneral);
$ohtml -> footer ();
$ohtml -> toFileClass ($this -> aGeneral['name'], $this -> aGeneral['name']);
$ohtml -> freeHtml ();
foreach ($this -> aMethods as $clef => $val) {
$ohtml -> header ();
$ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties, $clef);
$ohtml -> setContentMethods ($val);
$ohtml -> footer ();
$ohtml -> toFileMethProps ($this -> aGeneral['name'], $clef);
$ohtml -> freeHtml ();
}
foreach ($this -> aProperties as $clef => $val) {
$ohtml -> header ();
$ohtml -> setMenu ($this -> aGeneral['name'], $this -> aGeneral['classe'], $this -> aChild[$this -> aGeneral['name']]['children'], $this -> aMethods, $this -> aProperties, $clef);
$ohtml -> setContentProperties ($val);
$ohtml -> footer ();
$ohtml -> toFileMethProps ($this -> aGeneral['name'], $clef);
$ohtml -> freeHtml ();
}
$ohtml -> setIndex ();
}
/**
* méthode privée getCode
* sert à récupérer le code dans un fichier, d'une ligne de départ jusqu'à 1 ligne d'arrivée
* @Return : string code
*/
private function getCode ($filename, $start, $end) {
$code = '';
if (!empty ($filename)) {
if (!array_key_exists ($filename, $this -> fileBuf)) {
$this -> fileBuf[$filename] = file ($filename);
}
for ($i = $start - 1; $i <= $end; $i++) {
$code .= $this -> fileBuf[$filename][$i];
}
}
return $code;
}
/**
* méthode privée getGeneral
* sert à remplir le tableau des propriétés générales de la classe à analyser
* @Return : array aTmp
*/
private function getGeneral () {
$aTmp['name'] = $this -> getName ();
$aTmp['type'] = $this -> isInternal () ? 'internal' : 'user-defined';
$aTmp['abstract'] = $this -> isAbstract () ? 'abstract' : '';
$aTmp['interface'] = $this -> isInterface () ? 'interface' : 'class';
$aTmp['file'] = $this -> getFileName();
$aTmp['startline'] = $this -> getStartLine();
$aTmp['endline'] = $this -> getEndLine();
$aTmp['code'] = utf8_encode ($this -> getCode ($aTmp['file'], $aTmp['startline'], $aTmp['endline']));
$aTmp['final'] = $this -> isFinal () ? ' final' : '';
$aTmp['comments'] = method_exists ($this, 'getDocComment')?utf8_encode (htmlentities($this -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version');
$aTmp['total methods'] = count ($this -> getMethods ());
$aTmp['total properties'] = count ($this -> getProperties ());
$parent = $this -> getParentClass();
if (is_object ($parent)) {
$name = $parent -> getName ();
$parentType = $parent -> isInterface ()?'interface':'class';
} else {
$name = '';
$parentType = '';
}
$aTmp['classe'] = $name;
$aTmp['classeType'] = $parentType;
if (!empty ($aTmp)) {
return $aTmp;
} else {
return array ();
}
}
/**
* méthode privée getMethods
* sert à remplir le tableau des propriétés des méthodes de la classe à analyser
* @Return : array aTmp
*/
private function getaMethods () {
foreach ($this -> getMethods () as $val) {
$aTmp[$val -> getName ()] = array (
'name' => $val->getName (),
'type' => $val->isInternal() ? 'internal' : 'user-defined',
'abstract' => $val->isAbstract() ? ' abstract' : '',
'final' => $val->isFinal() ? ' final' : '',
'public' => $val->isPublic() ? ' public' : '',
'private' => $val->isPrivate() ? ' private' : '',
'protected' => $val->isProtected() ? ' protected' : '',
'static' => $val->isStatic() ? ' static' : '',
'constructor' => $val->isConstructor()?'constructor':($val -> isDestructor()?'destructor':'regular method'),
'file' => $val->getFileName(),
'startline' => $val->getStartLine(),
'endline' => $val->getEndline(),
'code' => utf8_encode ($this -> getCode ($val->getFileName(), $val->getStartLine(), $val->getEndline())),
'modifiers' => $val->getModifiers(). ' => '.implode(' ', Reflection::getModifierNames($val->getModifiers())),
'comments' => method_exists ($val, 'getDocComment')?utf8_encode (htmlentities($val -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version'),
'statics' => $val->getStaticVariables(),
'classe' => $val -> getDeclaringClass() -> getName (),
'parameters' => $this -> getaParameters ($val -> getParameters())
);
$aTmp[$val -> getName ()]['returns'] = $this -> getReturns ($aTmp[$val -> getName ()]['comments']);
$aTmp[$val -> getName ()]['params'] = $this -> getParams ($aTmp[$val -> getName ()]['comments']);
}
if (!empty ($aTmp)) {
return $aTmp;
} else {
return array ();
}
}
/**
* méthode privée getReturns
* sert à récupérer le code pour la/les valeur/s de retour de la méthode, si elle est documentée
* @Param string comments : contient une chaîne avec les commentaires de la méthode
* @Return array aTmp : contient un tableau avec les retours possibles
*/
private function getReturns ($comments) {
preg_match_all ('@\@return[s]?+(.+)@im', $comments, $res);
$aTmp = $res[1];
return (array)$aTmp;
}
/**
* méthode privée getParams
* sert à récupérer le code pour le/les paramètre/s de la méthode, si elle est documentée
* @Param string comments : contient une chaîne avec les commentaires de la méthode
* @Return array aTmp : contient un tableau avec les paramètres possibles
*/
private function getParams ($comments) {
preg_match_all ('@\@param[s]?+(.+)@im', $comments, $res);
$aTmp = $res[1];
return (array)$aTmp;
}
/**
* méthode privée getaParameters
* sert à remplir le tableau des paramètres des méthodes
* @Return : array aTmp
*/
private function getaParameters ($aArgs) {
$aTmp = array ();
if (!empty ($aArgs)) {
foreach ($aArgs as $val) {
$isArray = true === method_exists ($val, 'isArray')?$val -> isArray():false;
$aTmp[$val -> getName ()] = array (
'name' => $val -> getName (),
'reference' => $val -> isPassedByReference()?'&':'',
'array' => ($isArray)?'array':'',
'optional' => $val -> isOptional()?$this -> oloc -> getMsg ('doc', 'doc_optional'):$this -> oloc -> getMsg ('doc', 'doc_mandatory'),
'default' => ($val -> isDefaultValueAvailable())?$val -> getDefaultValue():''
);
}
}
if (!empty ($aTmp)) {
return $aTmp;
} else {
return array ();
}
}
/**
* méthode privée getGeneral
* sert à remplir le tableau des propriétés des propriétés de la classe à analyser
* @Return : array aTmp
*/
private function getaProperties () {
foreach ($this -> getProperties () as $val) {
$aTmp[$val -> getName ()] = array (
'name' => $val->getName (),
'public' => $val -> isPublic()?'public':'',
'private' => $val -> isPrivate()?'private':'',
'protected' => $val -> isProtected()?'protected':'',
'static' => $val -> isStatic()?'static':'',
'default' => $val -> isDefault()?$this -> oloc -> getMsg ('doc', 'doc_yes'):$this -> oloc -> getMsg ('doc', 'doc_no'),
'modifiers' => $val->getModifiers(). ' => '.implode(' ', Reflection::getModifierNames($val->getModifiers())),
'comments' => method_exists ($val, 'getDocComment')?utf8_encode (htmlentities ($val -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version'),
'classe' => $val -> getDeclaringClass() -> getName (),
'code' => utf8_encode ($this -> getPropsCode ($val -> getDeclaringClass() -> getFileName (), $val -> getName())),
);
$aTmp[$val -> getName ()]['defaultvalue'] = ltrim (strstr ($aTmp[$val -> getName ()]['code'], '='), '=');
}
if (!empty ($aTmp)) {
return $aTmp;
} else {
return array ();
}
}
/**
* méthode privée getPropsCode
* sert à récupérer la portin de code où est définie une propriété donnée
* @Params string fileName : nom du fichier où est définie la propriété
* @Params string name : nom de la propriété
* @Return : string code en cas de succès, false en cas d'échec
*/
private function getPropsCode ($fileName, $name) {
if (!empty ($fileName)) {
if (!array_key_exists ($fileName, $this -> fileBuf)) {
$this -> fileBuf[$fileName] = file ($fileName);
}
$cpt = count ($this -> fileBuf[$fileName]);
for ($i = 0; $i < $cpt; $i++) {
if (false !== strpos ($this -> fileBuf[$fileName][$i], $name)) {
$start = $i;
break;
}
}
if (isset ($start)) {
for ($i = $start; $i < $cpt; $i++) {
if (false !== strpos ($this -> fileBuf[$fileName][$i], ';')) {
$end = $i;
break;
}
}
}
if (isset ($end) && isset ($start)) {
$code = '';
for ($i = $start; $i <= $end; $i++) {
$code .= $this -> fileBuf[$fileName][$i];
}
return $code;
}
}
return false;
}
}
?>
Conclusion
Ci-dessus, uniquement la classe odoc. Le zip contient le script complet, et un fichier readme.txt pour l'aide.
Historique
- 09 février 2006 09:26:44 :
- ajout d'un test sur l'existence de la méthode getDocComment (); si elle n'existe pas, on remplace le commentaire par une indication comme quoi la version de PHP5 est trop vieille pour supporter cette méthode.
- 09 février 2006 09:45:45 :
- nouvelle mise à jour, ajout de la hiérarchie immédiate d'une classe dans la documentation : classe parente, classe fille qui l'a appelée.
- 09 février 2006 10:38:20 :
- oui je sais, je suis prolifique ce matin ;-) Nouvelle mise à jour donc, ajout des paramètres des méthodes.
- 09 février 2006 10:42:21 :
- Changement de la capture d'écran, pour reflèter les changements apportés à la classe
- 09 février 2006 10:46:15 :
- Grr, problème avec la capture
- 09 février 2006 10:55:52 :
- Nouvelle mise à jour encore : j'avais omis la différence entre l'héritage d'une classe, et d'une interface...problème réglé.
- 09 février 2006 12:13:45 :
- encore une... : on peut désormais afficher le code (coloré), d'une méthode ou d'une classe.
- 09 février 2006 13:09:36 :
- Ahem...oui je sais. Correction d'un petit bug sur la méthode isArray ()...maintenant, on détecte bien si un paramètre est un tableau ou non.
- 09 février 2006 15:10:16 :
- encore une : cette fois, on a une iterface utilisateur :-)
Le fichier readme.txt explique comment on s'en sert.
- 09 février 2006 15:26:28 :
- ajout d'un fichier index2.php montrant comment ne pas passer par l'interface utilisateur :-)
- 09 février 2006 16:58:15 :
- ajout de la détection des destructeurs (j'avais oublié) et d'améliorations mineures sur l'interface utilisateur.
- 09 février 2006 17:59:20 :
- dernière mise à jour aujourd'hui : changements mnieurs sur les styles
- 10 février 2006 13:42:43 :
- rajout de la documentation automatique pour les fonctions :-)
- 10 février 2006 14:59:34 :
- mise à jour de la navigation, avec un nouveau fichier index.html, page d'accueil de la documentation.
- 10 février 2006 15:06:09 :
- Modifs mineures sur le code
- 10 février 2006 16:39:59 :
- Mise à jour de la capture
- 11 février 2006 03:46:03 :
- Ajout de la localisation. Pour l'instant, je n'ai fait le français et l'anglais (mes connaissances dans les autres langues étant top limitées). Les documentations peuvent donc se faire dans les deux langues, chacune ayant son répertoire spécifique.
- 13 février 2006 10:13:12 :
- Ajout de nouvelles css, pour démontrer que le design est facilement changeable. Il suffit pour cela de nommer la css voulue "maaindoc.css".
- 15 février 2006 11:34:20 :
- Ajout de l'affichage du code de déclaration des propriétés de classe
- 15 février 2006 13:42:36 :
- changement de la méthode __destruct(à en méthode freeHtml ()
- 16 février 2006 13:35:13 :
- correction de bugs majeurs : si une classe n'a pas de propriétés...(ça buggait), et modification de la façon d'inclure les classes à documenter :-)
- 16 février 2006 16:01:03 :
- petit ajout, prise en compte du fcait que plusieurs classes peuvent être déclarées dans le même fichier (petit oubli :-) )
- 16 février 2006 17:33:32 :
- modification de l'expression régulière dans index.php
- 16 février 2006 18:04:39 :
- ajout de la valeur par défaut définie pour les propriétés
- 21 février 2006 11:56:53 :
- grosse mise à jour! J'ai corrigé un petit dysfonctionnement avec les classes php4, quand le nom de la classe et du constructeur est le même. Ils sont maintenant bien différenciés.
J'ai aussi modifié le fonctionnement pour les classes, on fonctionne désormais par packages. Plus besoin de donner le nom de l'instance, l'outil le trouve tout seul. Il documente tout un package de classes. Chaque package a sa page d'index personnelle, avec un diagramme de la hiérarchie des classes.
- 21 février 2006 13:41:21 :
- Petit oubli...
- 21 février 2006 14:05:44 :
- Correction de bugs mineurs
- 21 février 2006 14:12:08 :
- Petit bug sur la page index corrigé :-)
- 21 février 2006 14:41:51 :
- Et une nouvelle correction de bug, une...cette fois, ça a l'air ok :-)
- 21 février 2006 15:13:11 :
- Ben nan, restait un bug... ;-)
- 22 février 2006 10:17:26 :
- changement dans la façon de traiter la localisation : dans le dossier 'locales', on trouve mainbtenant des sous-dossiers : 1 par localisation (français et anglais pour l'instant), et dans chacun de ces sous dossiers, 3 fichiers xml (1 par type : documentation, UI, erreurs).
- 22 février 2006 11:23:55 :
- Ajout de l'allemand dans les langues supportées. UN grand merci à Bastian Gorke qui a fait la traduction :-)
- 22 février 2006 16:01:28 :
- Ajout d'un nouveau screenshot, et correction d'un bug d'encodage dans les commentaires.
- 22 février 2006 17:50:44 :
- Re modification concernant l'encoding.
- 01 mars 2006 15:01:45 :
- Corrections de quelques bugs sur les interfaces
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
diagramme de classe pour générateur de documentation [ par lili345 ]
Bonjour,Voila je dois créer un générateur de documentation en php pour mon projet de stage et je dois faire une analyse UML.Mais le problème c'est qu
Aide sur API Google nxgooglemapsapi.php [ par koestel ]
Bonjour,J'utilise la classe ''nxgooglemapsapi.php" pour mieux gèrer l'api google pour une applicationcela fonctionne mais j'aimerai pouvoir :Rajouter
Api en php et fonctions pour construire un fichier XML a partir d'un DATA(urgent) [ par sonia5 ]
Bonjour , tout lemondeje dois rèaliser un API ou je dois rèaliser une fonction qui permet de gènèrer un fichier XML à partir d'un argument Data de don
Classe de gestion ftp: problème de passage de valeur? [ par spoutch ]
Bonjour tout le monde ou tout du moins a ceux qui daignerons lire mon poste ^^Je travail en local sur le serveur Apache de wamp. A partir d'une source
Facebook [ par achrafff ]
Sujet : Développement d' un module de synchronisation des coordonnées des contacts du CRM open source de vtiger CRM à partir de FaceBook .je veux métr
urgent [ par achrafff ]
Bonjour,j'ai ce code je veux le développer,<?php// Copyright 2007 Facebook Corp. All Rights Reserved. // // Application: vtigerext// File: 'index.
api google map [ par debogger ]
existe t'il une api google map ecrit en php pour interagir sur une carte en fonction des coordonnées présente dans une base mysql
Classe Connexion.php la plus simple possible .... [ par Tartuffe245 ]
Bonjour à tous,J'ai créé une classe connexion pour mon site internet et il se trouve que j'ai une erreur qui revient souvent mais je ne sais pas comme
POO - probleme de conception [ par Diablo62 ]
Bonjour, Je débute en POO et j 'ai un petit soucis de conception j 'ai du mal a faire les liens entre mes objets.J'ai plusieurs objets : usager, utili
API PDF en php [ par debogger ]
slt la communauté je cherche un api en php pour pouvoir lire des cartes en pdf j'ai beaucoup fouillé sur le net j'ai pas trouvé grande chose cordialem
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|