Yanıtlar:
Bunu PHP'nin kendisinde de yapabilirsiniz:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Ya buna izin veren bir IDE kullanın (Eclipse PDT'yi tavsiye ederim) ya da Linux'taysa ya da wingrep kullanarak her zaman grep edebilirsiniz. Linux'ta şöyle bir şey olurdu:
grep -R "function funName" *
projenin kök klasöründen.
Netbeans gibi bir IDE kullanırsanız, CTRL + Kullan işlevine tıklayabilirsiniz ve dosyanın tanımladığınız proje klasörü içinde olduğunu varsayarak sizi tanımlandığı yere götürecektir.
Yine de bunu yapacak bir kod veya işlev yok.
Sanırım "tanımlanmış" derken "tanımlanmış" demek istiyorsunuz. Bunun için ideal olarak bunu yapabilecek iyi bir IDE'ye ihtiyacınız var.
Bu, tüm proje dosyalarınızı belirli bir dizge için tarayan ve size hangi dosyada olduğunu ve yalnızca temel php kullanarak hangi karakter konumunda başladığını söyleyen temel bir işlevdir . Umarım bu birine yardımcı olur ...
<?php
$find="somefunction()";
echo findString('./ProjectFolderOrPath/',$find);
function findString($path,$find){
$return='';
ob_start();
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_dir($path.'/'.$file)){
$sub=findString($path.'/'.$file,$find);
if(isset($sub)){
echo $sub.PHP_EOL;
}
}else{
$ext=substr(strtolower($file),-3);
if($ext=='php'){
$filesource=file_get_contents($path.'/'.$file);
$pos = strpos($filesource, $find);
if ($pos === false) {
continue;
} else {
echo "The string '$find' was found in the file '$path/$file and exists at position $pos<br />";
}
}else{
continue;
}
}
}
}
closedir($handle);
}
$return = ob_get_contents();
ob_end_clean();
return $return;
}
?>
Tom'un çözümünü beğendim, bu yüzden ReflectionFunction ile biraz daha fazla numara paylaşabileceğimi düşündüm (her PHP 5'te çalışmalı):
dosya adını yazdırmak için tek satırlık:
print (new ReflectionFunction("foo"))->getFileName();
Lütfen size dahili işlevlerin konumunu göstermeyeceğini unutmayın ( _ gibi ), ancak yine de aşağıdaki gibi API'yi yazdırabilir.
işlevin tanımını ve parametrelerini yazdırmak için:
print new ReflectionFunction("foo");
Misal:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUE
-> getFileName () ve -> getStartLine () FALSE döndürecektir.