Bagaimana saya bisa mengetahui di file dan baris mana fungsi tertentu didefinisikan?
Bagaimana saya bisa mengetahui di file dan baris mana fungsi tertentu didefinisikan?
Jawaban:
Anda juga bisa melakukan ini di PHP itu sendiri:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Gunakan IDE yang memungkinkan melakukannya (saya akan merekomendasikan Eclipse PDT), atau Anda selalu dapat grep jika di Linux, atau menggunakan wingrep. Di Linux akan menjadi seperti ini:
grep -R "function funName" *
dari dalam folder root proyek.
Jika Anda menggunakan IDE seperti Netbeans, Anda dapat CTRL + Klik fungsi yang digunakan dan ini akan membawa Anda ke tempat yang ditentukan, dengan asumsi file tersebut berada dalam folder proyek yang Anda tentukan.
Tidak ada kode atau fungsi untuk melakukan ini.
Saya berasumsi bahwa dengan "menggambarkan" yang Anda maksud adalah "didefinisikan". Untuk ini, idealnya Anda membutuhkan IDE yang layak yang dapat melakukannya.
Inilah fungsi dasar yang akan memindai seluruh file proyek Anda untuk string tertentu dan memberi tahu Anda file mana itu dan posisi karakter mana yang dimulai hanya dengan menggunakan php dasar. Semoga ini membantu seseorang ...
<?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;
}
?>
Saya suka solusi Tom, jadi saya pikir saya bisa membagikan lebih banyak trik dengan ReflectionFunction (ini harus berfungsi pada setiap PHP 5):
satu baris untuk mencetak nama file:
print (new ReflectionFunction("foo"))->getFileName();Harap dicatat bahwa ini tidak akan menunjukkan lokasi untuk fungsi internal (seperti _ ), tetapi masih dapat mencetak API untuk itu seperti di bawah ini.
untuk mencetak definisi dan parameter fungsi:
print new ReflectionFunction("foo");
Contoh:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUEmeans -> getFileName () dan -> getStartLine () akan mengembalikan FALSE.