Reflection is een beter manier dan regex: http://www.php.net/manual/en/class.reflectionfunction.php
Je kunt dan met ReflectionFunction::getFileName(), ReflectionFunction::getStartLine(), ReflectionFunction::getEndLine() en file() aan de gang om de code te krijgen.
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.
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!
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 ?