PHP Classes
elePHPant
Icontem

File: class/odocfunc.cls.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Johan Barbier  >  Class Doc  >  class/odocfunc.cls.php  >  Download  
File: class/odocfunc.cls.php
Role: Class source
Content type: text/plain
Description: Functions documentation class
Class: Class Doc
Generate PHP code documentation in multiple idioms
Author: By
Last change: Some bug corrections
Date: 9 years ago
Size: 5,237 bytes
 

Contents

Class file image Download
<?php
/**
* CLASS odocfunc
* classe de documentation de fonctions
* auteur : johan <barbier_johan@hotmail.com>
* version 10/02/2006
*
* free to use, modify, please just tell me if you make any changes :-)
*/
class odocfunc {

    private
$oloc;
   
/**
    * tableau des fonctions
    */
   
private $aFunctions = array ();

   
/**
    * chaine contenant le nom du fichier de fonctions
    */
   
private $sFileName = '';

   
/**
    * tableau buffer des lignes des fichiers codes
    */
   
private $fileBuf = array ();

   
/**
    * constructeur
    * @Params string fileName : nom du fichier à analyser
    * @Params array aFuncs : tableau contenant le nom des fonctions à analyser
    */
   
public function __construct (array $aFuncs, $fileName) {
           
$this -> oloc = new olocale ($_SESSION['locale']);
        if (empty (
$aFuncs)) {
           
trigger_error ($this -> oloc -> getMsg ('errors', 'no_function'), E_USER_ERROR);
        }
       
$this -> sFileName = $fileName;
        foreach (
$aFuncs as $func) {
           
$this -> aFunctions[$func] = $this -> getaFunctions ($func);
        }
       
$this -> buildHtmlFunc ();
    }

   
/**
    * méthode privée buildHtmlFunc
    * appelle l'objet ohtml pour construire effectivement la doc pour les fonctions
    */
   
private function buildHtmlFunc () {
       
$ohtml = new ohtml ();
       
$ohtml -> headerFunc ();
       
$ohtml -> setMenuFunc ($this -> sFileName, $this -> aFunctions);
       
$ohtml -> setContentGeneralFunc ($this -> sFileName, $this -> aFunctions);
       
$ohtml -> footer ();
       
$ohtml -> toFileFunc ($this -> sFileName, $this -> sFileName);
       
$ohtml -> freeHtml ();
        foreach (
$this -> aFunctions as $val) {
           
$ohtml -> headerFunc ();
           
$ohtml -> setMenuFunc ($this -> sFileName, $this -> aFunctions);
           
$ohtml -> setContentFunctions ($val);
           
$ohtml -> footer ();
           
$ohtml -> toFileFunc ($val['name'], $this -> sFileName);
           
$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 (!
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 getaFucntion
    * sert à remplir le tableau des propriétés des méthodes de la classe à analyser
    * @Return : array aTmp
    */
   
private function getaFunctions ($func) {
       
$oFunc = new ReflectionFunction ($func);
       
$aTmp = array (
             
'name' => $oFunc -> getName (),
             
'type' => $oFunc -> isInternal() ? 'internal' : 'user-defined',
             
'file' => $oFunc -> getFileName (),
              
'startline' => $oFunc->getStartLine(),
              
'endline' => $oFunc->getEndline(),
              
'comments' => method_exists ($oFunc, 'getDocComment')?utf8_encode (htmlentities($oFunc -> getDocComment ())):$this -> oloc -> getMsg ('errors', 'php_bad_version'),
             
'statics' => $oFunc -> getStaticVariables(),
             
'returnsref' => $oFunc -> returnsReference()?$this -> oloc -> getMsg ('doc', 'doc_yes'):$this -> oloc -> getMsg ('doc', 'doc_no'),
             
'parameters' => $this -> getaParameters ($oFunc -> getParameters())
            );
       
$aTmp['code'] = utf8_encode ($this -> getCode ($aTmp['file'], $aTmp['startline'], $aTmp['endline']));
       
$aTmp['returns'] = $this -> getReturns ($aTmp['comments']);
       
$aTmp['params'] = $this -> getParams ($aTmp['comments']);
        return
$aTmp;
    }

   
/**
    * méthode privée getReturns
    * sert à récupérer le code pour la/les valeur/s de retour de la fonction, 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 fonction, 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 fonctions
    * @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' => (true === $isArray)?'array':'',
                   
'optional' => $val -> isOptional()?$this -> oloc -> getMsg ('doc', 'doc_optional'):$this -> oloc -> getMsg ('doc', 'doc_mandatory'),
                   
'default' => (true === $val -> isDefaultValueAvailable())?$val -> getDefaultValue():''
                   
);
            }
        }
        return
$aTmp;
    }
}
?>