Wie Liste der Funktionen erhalten, dieFunktion Liste der PHP-Datei
Antwort
in einer PHP-Datei deklariert sind, können Sie die get_defined_functions()
Funktion verwenden, um alle definierten Funktion in Ihrem aktuellen Skript zu erhalten.
See: http://www.php.net/manual/en/function.get-defined-functions.php
Wenn Sie die Funktionen in einer anderen Datei definiert erhalten möchten, können Sie http://www.php.net/token_get_all wie diese versuchen, mit:
$arr = token_get_all(file_get_contents('anotherfile.php'));
Dann können Sie Loop-Through-Funktion Token mit den Symbolen zu finden definiert. Die Liste der Token können http://www.php.net/manual/en/tokens.php
finden Sie eine Liste der aktuell definierten Funktion unter Verwendung get_defined_functions()
bekommen kann:
$arr = get_defined_functions();
var_dump($arr['user']);
Interne Funktionen sind im Index internal
während benutzerdefinierte Funktion sind im Index user
.
Beachten Sie, dass dies alle Funktionen ausgibt, die vor diesem Aufruf deklariert wurden. Was bedeutet, dass wenn Sie include()
Dateien mit Funktionen, diese auch in der Liste sein werden. Es gibt keine Möglichkeit, Funktionen pro Datei zu trennen, außer sicherzustellen, dass Sie keine Datei vor dem Aufruf an include()
get_defined_functions()
.
Wenn Sie die eine Liste von Funktionen pro Datei haben muss, wird die folgende versuchen, eine Liste von Funktionen abzurufen, indem die Quelle Parsen.
function get_defined_functions_in_file($file) {
$source = file_get_contents($file);
$tokens = token_get_all($source);
$functions = array();
$nextStringIsFunc = false;
$inClass = false;
$bracesCount = 0;
foreach($tokens as $token) {
switch($token[0]) {
case T_CLASS:
$inClass = true;
break;
case T_FUNCTION:
if(!$inClass) $nextStringIsFunc = true;
break;
case T_STRING:
if($nextStringIsFunc) {
$nextStringIsFunc = false;
$functions[] = $token[1];
}
break;
// Anonymous functions
case '(':
case ';':
$nextStringIsFunc = false;
break;
// Exclude Classes
case '{':
if($inClass) $bracesCount++;
break;
case '}':
if($inClass) {
$bracesCount--;
if($bracesCount === 0) $inClass = false;
}
break;
}
}
return $functions;
}
Verwendung auf eigene Gefahr.
get_defined_functions() holt alle meine deklarierten Funktionen aus allen Dateien, nicht aus genau einer Datei! – zumrasha
@zumrasha: Siehe meine aktualisierte Antwort, die Ihnen eine Liste der verfügbaren Funktionen pro Datei gibt. –
Jeder, der dies verwendet, möchte vielleicht 'T_CURLY_OPEN' zum Schalter hinzufügen, um Zeichenfolgen wie' 'Hallo {$ name} '' – Twifty
Sie in der Datei enthalten und versuchen Sie dies:
$functions = get_defined_functions();
print_r($functions['user']);
Sie get_defined_functions verwenden können() vor und nach der Datei enthalten, und schauen, was das zweite Mal zu dem Array hinzugefügt wird. Da sie in der Reihenfolge der Definition zu sein scheinen, können Sie einfach den Index wie folgt verwenden:
$functions = get_defined_functions();
$last_index = array_pop(array_keys($functions['user']));
// Include your file here.
$functions = get_defined_functions();
$new_functions = array_slice($functions['user'], $last_index);
Gut für welchen Gründen auch immer, wenn Sie dies tun müssen, das ich dir zeigen:
Beispieldatei: Funktionen.php (Ich schrieb nur einige zufällige Scheiße nicht Mather es mit alles funktioniert)
<?php
// gewoon een ander php script. door het gebruiken van meerdere includes kun je gemakkelijk samen aan één app werken
function johannes($fnaam, $mode, $array){
switch ($mode) {
case 0:
echo "
<center>
<br><br><br><br><br>
he johannes!<br><br>
klik hier voor random text:<br>
<input type='submit' value='superknop' id='btn' action='randomding' level='0' loadloc='randomshit' />
<p id='randomshit'></p>
</center>
";
break;
case 1:
echo "bouw formulier";
break;
case 2:
echo "verwerk formulier";
break;
default:
echo "[Error: geen mode gedefinieerd voor functie '$fnaam'!]";
}
}
function randomding($fnaam, $mode, $array){
$randomar = array('He pipo wat mot je!','bhebhehehehe bheeeee. rara wie ben ik?','poep meloen!','He johannes, wat doeeeeee je? <input type="text" name="doen" class="deze" placeholder="Wat doe je?" /> <input type="button" value="vertellen!" id="btn" action="watdoetjho" level="0" loadloc="hierzo" kinderen="deze"> <p id="hierzo"></p>','knopje de popje opje mopje','abcdefghijklmnopqrstuvwxyz, doe ook nog mee','Appien is een **p!!!!!! hahhahah<br><br><br><br> hahaha','Ik weet eiegelijk niks meer te verzinnen','echt ik weet nu niks meer','nou oke dan[[][(!*([email protected]#&*$*^éäåðßð','he kijk een microboat: <br> <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS_n8FH6xzf24kEc31liZF6ULHCn2IINFurlFZ_G0f0_F4sLTi74w" alt="microboat" />');
$tellen = count($randomar);
$tellen--;
$rand = rand(0, $tellen);
echo $randomar[$rand];
}
function watdoetjho($fnaam, $mode, $array){
$dit = $array['doen'];
echo "Johannes is: $dit";
}
?>
Wir haben 3 Funktionen innerhalb hier:
- johannes
- randomding
- watdoetjho
Aber wir nennen diese Funktionen auch:
- Zählung
- rand
Wenn wir get_defined_functions
verwenden wir alle Funktionen innerhalb Umfang Skript erhalten. Ja, die PHP-Funktionen sind getrennt von den vom Benutzer deklarierten, aber wir wollen immer noch von einer bestimmten Datei.
Wenn wir token_get_all
verwenden, erhalten wir eine große Menge an Daten, die wir zuerst trennen müssen.
Ich fand diese Nummer, die wir brauchen, um einige Verbindungen innerhalb des Arrays zu machen, um die Benutzerfunktionen zu entsprechen. Ansonsten haben wir eine Liste mit allen php-Funktionen, die aufgerufen werden.
Die Zahlen sind:
- 334 (Liste aller Anwender deklarierten Funktionen)
- 307 (Liste aller Funktionsnamen)
Wenn wir das Array filtern alle nehmen die 334 Elemente haben wir diese:
334 - | - Funktion - | - 5
Aber wir brauchen den Funktionsnamen und alle Array-Elemente stehen in Relation zum 3. Wert. So, jetzt wir alle Array-Elemente Hexe den 3rth Wert entsprechen filtern müssen (5) und die konstante Zahl 307.
Dies wird uns so etwas wie dieses:
307 - | - johannes - | - 5
nun in PHP wird es wie folgt aussehen:
<?php
error_reporting(E_ALL^E_NOTICE); // Or we get these undefined index errors otherwise use other method to search array
// Get the file and get all PHP language tokens out of it
$arr = token_get_all(file_get_contents('Functions.php'));
//var_dump($arr); // Take a look if you want
//The array where we will store our functions
$functions = array();
// loop trough
foreach($arr as $key => $value){
//filter all user declared functions
if($value[0] == 334){
//Take a look for debug sake
//echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';
//store third value to get relation
$chekid = $value[2];
}
//now list functions user declared (note: The last chek is to ensure we only get the first peace of information about the function witch is the function name, else we also list other function header information like preset values)
if($value[2] == $chekid && $value[0] == 307 && $value[2] != $old){
// just to see what happens
echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';
$functions[] = $value[1];
$old = $chekid;
}
}
?>
Ergebnis in diesem Fall:
307 -|- johannes -|- 5
307 -|- randomding -|- 31
307 -|- watdoetjho -|- 43
Ich schrieb diese kleine Funktion, um die Funktionen in einer Datei zurückzugeben.
https://gist.github.com/tonylegrone/8742453
Es gibt eine einfache Anordnung aller Funktionsnamen.Wenn Sie es in der jeweiligen Datei sind rufen Sie scannen möchten, können Sie einfach die folgenden Befehle verwenden:
$functions = get_functions_in_file(__FILE__);
Wenn Sie nicht besorgt sind über einige Kommentar gesetzt diejenigen zu kontrollieren, könnte dies der einfachste Weg sein :
preg_match_all('/function (\w+)/', file_get_contents(__FILE__), $m);
var_dump($m[1]);
ich dieses Problem mit array_diff
gelöst
$funcs = get_defined_functions()["user"];
require_once 'myFileWithNewFunctions.php'; // define function testFunc() {} here
var_dump(array_values(array_diff(get_defined_functions()["user"], $funcs)))
// output: array[ 0 => "test_func"]
aktualisieren
Um die „echte“ Funktionen Name versuchen, diese
foreach($funcsDiff AS $newFunc) {
$func = new \ReflectionFunction($newFunc);
echo $func->getName(); // testFunc
}
- 1. Rufen Sie jede Funktion in der Liste
- 2. Ganze Liste in der Ajax.Autocompleter-Funktion
- 3. Die Aktualisierungsreihenfolge der Update-Liste derano-Funktion
- 4. Variable Funktion: Summe Elemente der Liste
- 5. Elisp Funktion Auswahl Argument aus der Liste
- 6. eine Liste der Funktion Parameter Anwenden, clojure
- 7. Funktion Mittelwerte in Liste der Wörterbücher
- 8. konvertieren Sage Liste der Liste der Liste zu R Liste der Liste der Liste
- 9. Verknüpfte Liste SortedInsert() -Funktion
- 10. Django | Aus der Liste in der Vorlage eine Funktion auslösen
- 11. Factory-Funktion verknüpfte Liste Problem
- 12. MEANJS Server Controller Liste Funktion
- 13. eine Liste einer Funktion Argumente
- 14. verlinkte Liste Warteschlange [pop Funktion]
- 15. Matlab anonyme Funktion Liste Argumente
- 16. Erhalten Sie eine Liste aller Funktionsparameter von innerhalb der Funktion
- 17. Verwenden Sie die Elemente der Liste in einem Format-Funktion
- 18. Wie dynamisch Typ der Liste <> Funktion angeben?
- 19. Übergeben Sie die Funktion an die Elemente der untergeordneten Liste
- 20. Wie bekomme ich eine Liste aller möglichen Ausnahmen der Funktion
- 21. R foreach in der Funktion kann nicht erkennen, Liste
- 22. GDB - Liste Quelle der aktuellen Funktion ohne seinen Namen
- 23. Lambda-Funktion für die Liste der Werte in Parametern
- 24. Aufruf Javascript Funktion onchange Ereignis der Dropdown-Liste
- 25. Funktion berechnete Spalte zur Liste der Datenrahmen hinzufügen
- 26. Python: Für jedes Listenelement eine Funktion in der Liste anwenden
- 27. Zuweisen Länge einer Liste der Parameter einer Funktion
- 28. Erstellen Sie eine Liste der Funktion zur Kompilierzeit
- 29. Wie ich Funktion auf der Liste läuft mit Fehlerausbreitung
- 30. Assign-Funktion der Ausgabe auf leere Liste konstant in Python
get_defined_functions() bekommt alle meine deklarierten Funktionen von allen Dateien, nicht aus exacly einer Datei zu erhalten! – zumrasha
aktualisiert. Sie könnten 'token_get_all()' verwenden. Wenn Sie Includes und Requests verwenden, werden die in den anderen Dateien definierten Funktionen ebenfalls in dieser Datei definiert. – mauris