Php dosyadan kendi verileri ile bildirilen işlevler listesini almak nasıl?

1 Cevap php

Ben php dosyasından içerikleri (sadece işlev adı) ile fonksiyonların listesini almak gerekiyor. Ben regex kullanmaya çalıştı ama sınırlamalar çok var. Bu fonksiyonların her türlü ayrıştırmak değildir. fonksiyon ve eğer için döngü deyimlerini varsa örneğin o başarısız olur.

in details: I have around 100 include files. each file has number of declared functions. some files has functions duplicated in other files. so what I want is to get list of all functions from specific file then put this list inside an array then I will be using array unique in order to remove the duplicates. I read about tokenizer but I really have no idea how to make it grab the declared function with its data. all I have is this:

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

unfortunately, this function lists only the function names.. what I need is to list the whole declared function with its structure.. so any ideas?

şimdiden teşekkürler ..

1 Cevap

Eğer gelen işlev adları var eğer senin get_defined_functions, kalan çalışma için Reflection API kullanmayı düşünebilirsiniz.

Örnek:

include 'file-with-functions.php';
$reflector = new ReflectionFunction('foo'); // foo() being a valid function
$body = array_slice(
    file($reflector->getFileName()), // read in the file containing foo()
    $reflector->getStartLine(), // start to extract where foo() begins
    $reflector->getEndLine() - $reflector->getStartLine()); // offset

echo implode($body);

Gibi @nunthrey suggested, ayrıca Zend_Reflection hem de almak için kullanabileceğiniz bir dosyaya ve içerik işlevleri. Ile Örnek Zend_Reflection,

$reflector = new Zend_Reflection_File('file-with-functions.php');
foreach($reflector->getFunctions() as $fn) {
    $function = new Zend_Reflection_Function($fn->name);
    echo $function->getContents();
}