Source code uitlezen van een functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: 1 2 volgende »

Rowdy van der Meer

Rowdy van der Meer

13/07/2012 09:54:21
Quote Anchor link
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 ?
 
PHP hulp

PHP hulp

22/12/2024 16:26:58
 
Wouter J

Wouter J

13/07/2012 10:21:48
Quote Anchor link
Ik snap niet precies wat je bedoelt, maar ik denk dat je een soort code block wil creëren? Of kun je het anders wat duidelijker uitleggen, eventueel met een voorbeeldje?
 
Rowdy van der Meer

Rowdy van der Meer

13/07/2012 10:37:32
Quote Anchor link
http://nl3.php.net/manual/en/function.explode.php

Daar heb je idd een code block met een example nu wil ik ongeveer ook zoon code block.

maar dan met de functie zelf kwa code.

dus ik maak function test() { echo "test"; }

en dan wil ik die code in dat code block zetten.
 
Reshad F

Reshad F

13/07/2012 10:42:45
Quote Anchor link
je moet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<pre>
<code>
 $variabele = 0;

echo $variabele;
</code>
</pre>


en dan kan je in je css pre enof code opmaken :)
 
Rowdy van der Meer

Rowdy van der Meer

13/07/2012 10:48:05
Quote Anchor link
Ja dat is hoe je het uiteindelijk op de pagina zet :p maar w8 zal even beter verwoorden mischien dat het dan stuk duidelijker is.


met de volgende functie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    private function getComments($filename)
    {

        $expr = "/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/";
        $file = fopen($filename, "r");
        $length = filesize($filename);
        $comments = fread($file, $length);

        preg_match_all($expr, $comments, $matchs);

        foreach($matchs[0] as $id => $variable){
            $comments = str_replace($variable,'',$comments);
        }

        fclose($file);
}

?>


Haal ik all mijn phpdoc style comments uit een class.
Vevolgens maak ik daar een mooi object van blablabla.

maar nu wil ik ook de functie him zelf in het object toevoegen zo dat ik ook een source code van de functie zelf kan weergeven op mijn pagina.

Hoop dat ik me nu beter duidelijk gemaakt heb.

Reshad F op 13/07/2012 10:42:45:
je moet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<pre>
<code>
 $variabele = 0;

echo $variabele;
</code>
</pre>


en dan kan je in je css pre enof code opmaken :)
Gewijzigd op 13/07/2012 10:48:31 door Rowdy van der Meer
 
Wouter J

Wouter J

13/07/2012 11:16:58
Quote Anchor link
Waarom ben je het wel aan het uitvinden voor nog een PHPdoc parser? Kan je niet gewoon beter PHPdoc2 of Sami gebruiken?

En anders zul je dit inderdaad met REGEXEN op moeten lossen.
 
Rowdy van der Meer

Rowdy van der Meer

13/07/2012 11:38:26
Quote Anchor link
Omdat het kan en leuk is.
En mischien omdat het niet alleen een PHPdoc wordt maar ook meteen anderen documentatie en dan vond ik het toch wel handig om alles in eigen beheer te hebben en niet afhankelijk ben van een derde partij.
 
Roel -

Roel -

13/07/2012 13:48:04
Quote Anchor link
Je bent sowieso afhankelijk van een derde partij. Of draait jouw pc op een fiets?
 
Rowdy van der Meer

Rowdy van der Meer

13/07/2012 13:54:18
Quote Anchor link
verwijder dit topic maar.
 
Roel -

Roel -

13/07/2012 15:40:49
Quote Anchor link
Dat slaat nergens op, kun je niet eens tegen een beetje humor?
Wouter vraagt alleen waarom je het wiel opnieuw uit wil vinden. Er zijn mensen die het werk al voor jou gedaan hebben, en dan hoogstwaarschijnlijk nog veel beter ook.

Overigens verwijderen we niet zomaar topics hier, dus ga verder met je vraag. :-)
 
Wouter J

Wouter J

13/07/2012 16:04:54
Quote Anchor link
Rowdy, begrijp me niet verkeerd. Als we nergens het wiel opnieuw zouden willen uitvinden kan ik wel stoppen met programmeren. Alleen weet wel dat het wel een helse klus is.

En volgens mij had ik het antwoord al gegeven, je hebt hier inderdaad regexen voor nodig. In PHP bestaat niet zoiets als in JS waarbij je elke functie naar een string kan omtoveren. Alleen ook dat wordt een heel karwei. Want je kan niet zomaar `function .*?\(.*?\) {(.*?)}` gebruiken, aangezien je dan totaan de eerste volgende } matched, wat ook een if statement kan zijn bijv. Maar als je die ? weghaalt match je het hele bestand vanaf de eerste functie totaan de laatste.
 
Dos Moonen

Dos Moonen

13/07/2012 23:50:28
Quote Anchor link
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.
 
Rowdy van der Meer

Rowdy van der Meer

15/07/2012 03:49:08
Quote Anchor link
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.
 
Dos Moonen

Dos Moonen

15/07/2012 04:34:01
Quote Anchor link
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.
 
Rowdy van der Meer

Rowdy van der Meer

17/07/2012 10:13:35
Quote Anchor link
Bedankt Dos Moonen ik had de ReflectionFunction nog niet echt gevonden.

even mee wezen stoeien en het volgende resultaat behaald.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
{
    (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


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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
Gewijzigd op 17/07/2012 10:14:41 door Rowdy van der Meer
 
Wouter J

Wouter J

17/07/2012 10:59:05
Quote Anchor link
Weet je wat al helemaal mooi is, dat je ook de PHPdoc kunt krijgen met de Reflection klassen (er zijn er meer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$reflectionFunc
= new \ReflectionFunction('testfunction');

echo $reflectionFunc->getDocComment();
?>


En je kan ook een hele klasse met properties en functies reflecteren doormiddel van ReflectionClass en ReflectionProperty en ReflectionMethod en zelfs ReflectionParameter. Ik had er nog nooit van gehoord, maar ziet er erg goed uit!
 
Rowdy van der Meer

Rowdy van der Meer

17/07/2012 11:13:39
Quote Anchor link
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 ?
 
Wouter J

Wouter J

17/07/2012 11:53:50
Quote Anchor link
Quote:
vind ik vrij lang ?

Voor veel bestanden niet, PHPdoc is ook niet heel erg snel bij grote bestanden.
 
Rowdy van der Meer

Rowdy van der Meer

18/07/2012 16:38:38
Quote Anchor link
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.
 
Wouter J

Wouter J

18/07/2012 17:40:43
Quote Anchor link
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.
 
Eddy E

Eddy E

18/07/2012 17:43:16
Quote Anchor link
Ik ben daar dan wel benieuwd naar. Niet dat ik het direct kan/ga gebruiken, maar leren kan nooit kwaad.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.