2011-06-06 21 views
5

Kaynak koddaki token_get_all() işlevini kullanarak "funcname" işlevinin tüm argümanlarını bulmama yardım et. Kulağa basit geliyor, ancak parametreler olarak diziler gibi birçok özel seçenek var ya da parametre olarak statik yöntemleri çağır. Belki basit bir evrensel çözüm var mı?PHP, Tokenizer, fonksiyonun tüm argümanlarını bulun

UPD:

Bunu çağırdığınızda geçirilen fonksiyon argümanları gerekir. Dosyanın harici bir analizinde olmalarını sağlayın.

[0] => array('foo'), 
[1] => array(array('foo'), 'bar') 
+1

Merhaba Anton, Yerelleştirme işlevlerinin statik analizi için benzer bir sorun var. Bunun için sağlam bir çözüm buldunuz mu? – Gavin

cevap

5

: Böyle bir liste almak gerekir, Bunun sonucunda

$source = file_get_contents('source.php'); 
$tokens = token_get_all($source); 
... 

:

<?php 
funcname('foo'); 
funcname(array('foo'), 'bar'); 

olarak başlamalıdır analizörü şu: Örneğin, bir php dosyası var Bir belirteç kullanmak yerine, yansıma kullanın. Bu durumda, ReflectionFunction kullanın:

function funcname ($foo, $bar) { 

} 

$f = new ReflectionFunction('funcname'); 
foreach ($f->getParameters() as $p) { 
    echo $p->getName(), "\n"; 
} 

Bu

foo 
bar 

Ayrıca bir fonksiyon ve parametreleri, böyle hakkında daha fazla bilgi edinmek için bu sınıfını ve ilgili sınıfları (örneğin ReflectionParameter gibi) kullanabilirsiniz verir Bir parametrenin isteğe bağlı olup olmadığı ve varsayılan değerinin ne olduğu gibi.

+0

Teşekkürler. Sorunu yanlış tanımladım, konuyu güncelledim. – Anton

İlgili konular