2010-02-08 48 views

Trả lời

170

Bạn cũng có thể làm điều này trong PHP bản thân:

$reflFunc = new ReflectionFunction('function_name'); 
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine(); 
+6

+1 để giải quyết điều này với PHP thay vì IDE. Ý kiến ​​hay. – Gordon

+8

Mẹo: '$ reflFunc-> isInternal() === TRUE' có nghĩa là -> getFileName() và -> getStartLine() sẽ trả về FALSE. –

+0

tính năng này không hoạt động đối với tôi – Ash

1

Tôi giả định rằng theo "được mô tả", bạn có nghĩa là "đã xác định". Đối với điều này, bạn lý tưởng cần một IDE phong nha mà có thể làm điều đó.

+0

Tôi đang sử dụng Aptana có tìm kiếm văn bản thông qua dự án. Nhưng để sử dụng nó tôi cần phải nhập trang web lỗ (rất lớn) như là một dự án. – SaltLake

3

Nếu bạn sử dụng IDE như Netbeans, bạn có thể CTRL + Nhấp vào chức năng sử dụng và nó sẽ đưa bạn đến nơi nó được xác định, giả định 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 nào để thực hiện việc này.

+0

Tương tự trong Zend Studio và tôi giả định điều này sẽ làm việc với PDT cho Eclipse sau đó. – Gordon

+0

@Gordon "một IDE như" Tôi nghĩ rằng đây là một phải có cho _any_ IDE hiện đại ... – feeela

+1

Nhưng có mã để làm điều này –

11

Hoặc sử dụng một IDE cho phép làm như vậy (tôi sẽ giới thiệu Eclipse PDT), hoặc bạn có thể allways grep 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ừ bên trong thư mục gốc của dự án.

+5

tốt hơn để có: grep -R "function \ sfunName" * – David

0

Bạn sẽ cần một IDE hỗ trợ chức năng "Tuyên bố chức năng mở". Một điều tốt cho php là Eclipse PDT.

Để tìm định nghĩa hàm, hãy chọn tên hàm, giữ CTRL + Nhấp vào tên.

2

Heres một chức năng cơ bản mà sẽ quét toàn bộ hồ sơ dự án của bạn cho một chuỗi cụ thể và cho bạn biết tập tin đó là, những thứ char vị trí của nó bắt đầu chỉ sử dụng php cơ bản. Hy vọng điều này sẽ giúp người ...

<?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; 
} 
?> 
+3

sử dụng 'grep' thay thế! –

1

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ủ đoạn với ReflectionFunction (nó sẽ hoạt động trên tất cả các PHP 5):

  • một -liner để in filename:

    print (new ReflectionFunction("foo"))->getFileName(); 
    

Xin lưu ý rằng nó sẽ không hiển thị cho bạn những vị trí fo r internal chức năng (chẳng hạn như _), nhưng nó vẫn có thể in API cho nó như dưới đây.

  • để in các định nghĩa và các thông số của hàm:

    print new ReflectionFunction("foo"); 
    

    Ví dụ:

    $ php -r 'print new ReflectionFunction("_");' 
    Function [ <internal:gettext> function _ ] { 
        - Parameters [1] { 
        Parameter #0 [ <required> $msgid ] 
        } 
    } 
    
1

một cách khác để kiểm tra nơi nào để chức năng xác định, cố gắng xác định lại chức năng, hệ thống lỗi PHP sẽ trả về một lỗi đơn giản cho bạn biết vị trí được định nghĩa trước đây

Các vấn đề liên quan