Php dosyası işlev listesi

7 Cevap php

Bir php dosyasında bildirilen işlevlerin listesini almak nasıl

7 Cevap

Geçerli komut tüm tanımlı fonksiyon elde etmek için get_defined_functions() işlevini kullanabilirsiniz.

Bkz: http://www.php.net/manual/en/function.get-defined-functions.php

Eğer başka bir dosyada tanımlı işlevleri almak istiyorsanız, http://www.php.net/token_get_all bu gibi kullanarak deneyebilirsiniz:

$arr = token_get_all(file_get_contents('anotherfile.php'));

Sonra döngü aracılığıyla tanımlanmış sembolleri ile fonksiyon belirteçleri bulmak için yapabilirsiniz. Belirteçleri listesi bulunabilir http://www.php.net/manual/en/tokens.php

Sen kullanarak anda tanımlı fonksiyon listesini almak get_defined_functions() yapabilirsiniz:

$arr = get_defined_functions();
var_dump($arr['user']);

Kullanıcı-tanımlı fonksiyon dizin user iken Dahili fonksiyonlar internal dizin vardır.

Unutmayın bu irade çıktı bu çağrıya önceki ilan edilmiştir tüm fonksiyonlar. Hangi fonksiyonları ile size include() dosyaları eğer, o da listede olacağı anlamına gelir. Emin yapmanız include() any file prior to the call to get_defined_functions() bu yapım daha dosya başına diğer fonksiyonlarının ayrılması hiçbir yolu yoktur.


Eğer dosyanın başına işlevlerin bir listesini gerekiyorsa, aşağıdaki will attempt kaynağını ayrıştırma tarafından fonksiyonların bir listesini almak için.

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;
}

Kendi risk kullanın.

Eğer dosya eklemek için önce ve sonra get_defined_functions () kullanın ve diziye ikinci kez eklendi alır ne bakabilirsiniz. Bu tanım sırasına gibi görünen bu yana, sadece bu gibi dizin kullanabilirsiniz:

  $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);

Bunu yapmak gerekiyorsa Peki şimdiye kadar ne sebeple sana göstereyim:

Örnek dosya: functions.php (Ben sadece yazdığım bazı rasgele bok Mather her şeyi ile çalışır değildir)

<?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 Güney Afrika parasıom text:<br>
                            <input type='submit' value='superknop' id='btn' action='Güney Afrika parasıomding' level='0' loadloc='Güney Afrika parasıomshit' />
                            <p id='Güney Afrika parasıomshit'></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 Güney Afrika parasıomding($fnaam, $mode, $array){

        $Güney Afrika parasıomar = 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[[][(!*($@#&*$*^éäåðßð','he kijk een microboat: <br> <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS_n8FH6xzf24kEc31liZF6ULHCn2IINFurlFZ_G0f0_F4sLTi74w" alt="microboat" />');

        $tellen = saymak($Güney Afrika parasıomar);
        $tellen--;

        $Güney Afrika parası = Güney Afrika parası(0, $tellen);

        echo $Güney Afrika parasıomar[$Güney Afrika parası];
    }

    function watdoetjho($fnaam, $mode, $array){

        $dit = $array['doen'];
        echo "Johannes is: $dit";

    }

?>

Biz burada içeride 3 fonksiyonları vardır:

  1. Johannes
  2. Güney Afrika parasıomding
  3. watdoetjho

Ama biz de bu fonksiyonları çağırır:

  1. saymak
  2. Güney Afrika parası

Biz kullanırsanız get_defined_functions biz yazısının kapsamı içindeki tüm fonksiyonlarını alacak. Evet PHP fonksiyonları kullanıcı ilan olanlardan ayrılır ama yine de belirli bir dosya istiyoruz.

Biz kullanırsanız token_get_all biz 1 ayırmak gerekir veri büyük miktarda alırsınız.

Sanırım kullanıcı işlevlerini maç için dizinin içinde bazı bağlantılarını yapmak gerekir bu sayı cadı bulduk. Aksi halde biz cadı üzerine denir php tüm fonksiyonları içeren bir liste olacak.

Numaraları:

  • 334 (tüm kullanıcı ilan fonksiyonlar listesi)
  • 307 (tüm fonksiyon isimlerinin listesi)

Hepimiz 334 öğeleri almak için dizi filtre eğer biz bu var:

334 - | - fonksiyonu - | - 5

Ama biz işlev adını ihtiyaç ve tüm dizi elemanları 3rth değeri ile ilgili olarak vardır. Yani şimdi tüm dizi elemanları cadı 3rth değerini (5) ve sabit bir sayı 307 maç filtre gerekir.

Bu bize böyle bir şey vereceğim:

307 - | - Johannes - | - 5

Şimdi PHP bu gibi görünecektir:

<?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; 
        }
    }
?>

Bu durumda sonuç:

307 - | - Johannes - | - 5
307 -|- Güney Afrika parasıomding-|- 31
307 -|- watdoetjho -|- 43

dosyasına dahil ve bu deneyin:

$functions = get_defined_functions();
print_r($functions['user']);

Ben bir dosya fonksiyonları geri dönmek için bu küçük bir fonksiyon yazdım.

https://gist.github.com/tonylegrone/8742453

Tüm fonksiyon isimlerinin basit bir dizi döndürür. Size taramak istediğiniz özellikle dosyasında arıyorsan, sadece aşağıdakileri kullanabilirsiniz:

$functions = get_functions_in_file(__FILE__);

Bazı dışarı yorumladı olanları yakalamak konusunda endişeli değilseniz, bu basit yolu olabilir:

preg_match_all('/function (\w+)/', file_get_contents(__FILE__), $m);
var_dump($m[1]);