Câu trả lời:
Bạn cũng có thể làm điều này bằng chính PHP:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Hoặc sử dụng một IDE cho phép làm như vậy (tôi khuyên bạn nên sử dụng Eclipse PDT), hoặc bạn có thể liên kết nó nếu trên Linux hoặc sử dụng wingrep. Trong Linux, nó sẽ giống như sau:
grep -R "function funName" *
từ trong thư mục gốc của dự án.
Nếu bạn sử dụng một IDE như Netbeans, bạn có thể CTRL + Nhấp vào sử dụng hàm và nó sẽ đưa bạn đến nơi nó được xác định, giả sử tệp nằm trong thư mục dự án bạn đã xác định.
Không có mã hoặc chức năng để làm điều này mặc dù.
Tôi giả định rằng bằng cách "mô tả" bạn có nghĩa là "được xác định". Đối với điều này, lý tưởng là bạn cần một IDE phù hợp để có thể làm được.
Đây là một chức năng cơ bản sẽ quét toàn bộ tệp dự án của bạn để tìm một chuỗi cụ thể và cho bạn biết tệp đó nằm ở đâu và vị trí ký tự nào mà nó bắt đầu khi chỉ sử dụng php cơ bản. Hy vọng điều này sẽ giúp ai đó ...
<?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;
}
?>
Tôi thích giải pháp của Tom, vì vậy tôi nghĩ tôi có thể chia sẻ thêm một chút thủ thuật với ReflectionFunction (nó sẽ hoạt động trên mọi PHP 5):
một lớp lót để in tên tệp:
print (new ReflectionFunction("foo"))->getFileName();
Xin lưu ý rằng nó sẽ không hiển thị cho bạn vị trí cho các hàm nội bộ (chẳng hạn như _ ), nhưng nó vẫn có thể in API cho nó như bên dưới.
để in định nghĩa và các tham số của hàm:
print new ReflectionFunction("foo");
Thí dụ:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUE
có nghĩa là -> getFileName () và -> getStartLine () sẽ trả về FALSE.