itsource

함수가 정의되어 있는 장소를 확인하는 방법

mycopycode 2022. 12. 4. 22:38
반응형

함수가 정의되어 있는 장소를 확인하는 방법

특정 함수가 정의된 파일 및 행을 확인하려면 어떻게 해야 합니까?

PHP 자체에서도 이 작업을 수행할 수 있습니다.

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

이를 허용하는 IDE를 사용하거나(Eclipse PDT를 권장함), 리눅스 또는 wingrep을 사용하는 경우 언제든지 GREP를 사용할 수 있습니다.Linux 에서는 다음과 같습니다.

grep -R "function funName" *

프로젝트의 루트 폴더 내에서 사용할 수 있습니다.

Netbeans와 같은 IDE를 사용하는 경우 CTRL+함수 사용을 클릭하면 정의한 프로젝트 폴더 내에 파일이 있다고 가정하여 정의된 위치로 이동합니다.

단, 이를 위한 코드나 함수는 없습니다.

'descripted'라는 말은 'defined'라는 뜻인 것 같아요.그러기 위해서는 적절한 IDE가 필요합니다.

프로젝트 파일 전체를 스캔하여 특정 문자열을 검색하여 기본 php만을 사용하여 시작하는 파일 및 문자 위치를 알려 주는 기본 함수를 소개합니다.이게 도움이 됐으면 좋겠는데...

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

톰의 솔루션이 마음에 들어서 Reflection과 조금 더 트릭을 공유할 수 있을 것 같아서기능(모든 PHP 5에서 작동해야 함):

  • 파일 이름을 인쇄하기 위한 한 줄:

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

내부 기능(_ )의 위치는 표시되지 않지만 아래와 같이 API를 인쇄할 수 있습니다.

  • 함수의 정의 및 파라미터를 인쇄하려면:

    print new ReflectionFunction("foo");
    

    예:

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

함수가 정의된 위치를 확인하고 함수를 재정의하려고 하면 PHP 오류 시스템은 이전에 정의된 함수의 위치를 알려주는 오류를 반환합니다.

기능 선언 열기 기능을 지원하는 IDE가 필요합니다.php에 적합한 것은 Eclipse PDT입니다.

함수 정의를 찾으려면 함수 이름을 강조 표시하고 CTRL 키를 누른 상태에서 이름을 클릭합니다.

언급URL : https://stackoverflow.com/questions/2222142/how-to-find-out-where-a-function-is-defined

반응형