Ik probeer een klein documentatie script te maken.

Nu loop ik tegen één klein probleem aan dat ik voor een functie de code bij me documentatie wil laten generen.

Is er een makkelijke manier om de source van een bepaalde functie op te halen.
of moet het gewoon maar met een aantal regexen ?
Ik heb een beetje overdreve geantwoord op jullie reacties jullie kunnen er niks aan doen. maar had de zelfde vraag op een ander forum ook gesteld en daar kreeg ik van die recties je kan geen source van een php pagina halen etc. en dan kijk je hier en krijg je ook zo antwoord van hmm ja dat vraag ik niet geef gewoon antwoord xD.

Mijn excuses daarvoor.

De reden dat ik me eigen PHPDoc parser maak is vrij simpel.
Ik wil binnen mijn framework de documenten kunnen laten generen.

Dit met cach bestanden voor het bestand ingeladen wordt gewoon simpel kijken of de source aangepast is na de laatste phpdoc generate is dat niet het geval laat het bestand van de cache is en anders genereer een nieuwe versie.

Heb geprobeerd dit met behulp van de phpdocs die momenteel te verkrijgen zijn maar daar kreeg ik het niet voor elkaar om het resultaat te behalen die ik eigenlijk wens.

Momenteel heb ik het volgende al werken.

- Browse door source om alle phpdoc format comments te verzamelen.
- Genereren van een sitemap.
- HTML template
- Cashe verhaal
- phpdoc comments parsen en deze mooi overzicht weergeven.

Het enigste wat ik nog wens is dan het verhaal van de source code van de functie.

Ik had zelf het idee om het via regel nummers te doen eerst kijken welk nummer de phpdoc commens einigen vervolgens zoek het begin van de volgende phpdoc comment.

Lees de lines tussen die 2 regels zo dat ik de source code van de functie heb./
Maar volgens mij moet dit makkelijke kunnen dan deze op lossing en minder bug gevoeliger. aangezien dit nog wel is goed fout geparst kan worden.
Als het mogelijk is om het bestand te includen (en dan bedoel ik of er iets wordt uitgevoerd of alleen een classe/functie wordt aangemaakt) dan kan het met reflection gedaan worden.
Zie mijn vorige post voor meer info over wat je er voor nodig hebt.
Bedankt Dos Moonen ik had de ReflectionFunction nog niet echt gevonden.

even mee wezen stoeien en het volgende resultaat behaald.


{
    (string) $str = "";
    (array)  $arr = array();    
    
    $str = "1,2,3,4,5,6,7,8,9,10";
    $arr = explode(',', $str);
    
    return implode(';',$arr);
}


Mocht er iemand zijn die het zelfde wil bereiken hier is de code die ik gebruik voor het resultaat hier boven aangegeven



<?php

function testfunction()
{
    (string) $str = "";
    (array)  $arr = array();    
    
    $str = "1,2,3,4,5,6,7,8,9,10";
    $arr = explode(',', $str);
    
    return implode(';',$arr);
}

$func = new ReflectionFunction('testfunction');
$filename = $func->getFileName();
$start_line = $func->getStartLine();
$end_line = $func->getEndLine();
$length = $end_line - $start_line;

$source = file($filename);
$body = implode("", array_slice($source, $start_line, $length));

echo "<pre>";
print_r($body);

?>


ps De functie is gewoon een testfunctie even snel wat ingezet slaat eigenlijk nergens op de functie maar toch :p
Weet je wat al helemaal mooi is, dat je ook de PHPdoc kunt krijgen met de Reflection klassen (er zijn er meer:
<?php
$reflectionFunc = new \ReflectionFunction('testfunction');

echo $reflectionFunc->getDocComment();
?>

En je kan ook een hele klasse met properties en functies reflecteren doormiddel van [php]ReflectionClass[/php] en [php]ReflectionProperty[/php] en [php]ReflectionMethod[/php] en zelfs [php]ReflectionParameter[/php]. Ik had er nog nooit van gehoord, maar ziet er erg goed uit!
Morgen maar weer is mee spelen.

ziet er inderdaad goed uit.

misschien dat het meteen me traagheid in me script oplost.
Het opnieuw generen van een documentatie pagina duurt nu bijna 1.5 seconde vind ik vrij lang ?
vind ik vrij lang ?

Voor veel bestanden niet, PHPdoc is ook niet heel erg snel bij grote bestanden.
Bedankt ik heb de Reflection methodes van php is even allemaal door genomen.

En even een stukje code gemaakt zo dat ik mooi een de source code krijg van de functie die ik ophaal.

mocht iemand interesse hebben in de code wil ik deze wel delen stuur een pm of plaats een reactie.
Het is beter om de code hier op het forum te zetten of op een website als pastbin.com of snippler.com, zo hebben mensen er straks ook nog wat aan.
Ik ben daar dan wel benieuwd naar. Niet dat ik het direct kan/ga gebruiken, maar leren kan nooit kwaad.

Reageren