PHP 함수의 코드 재구성 / 가져 오기
이름으로 기능 코드를 프로그래밍 방식으로 얻을 수 있습니까?
처럼:
function blah($a, $b) { return $a*$b; }
echo getFunctionCode("blah");
가능할까요?
함수 / 클래스 코드를 재구성하는 PHP 자체 설명 함수가 있습니까?
(소스 파일에서 바로 소스 코드를 가져 오는 대신)
Java에는 http://java.sun.com/developer/technicalArticles/ALT/Reflection/ 이 있습니다.
PHP :
get_class_methods ()
typeof
ReflectionFunction (Alin Purcaru에게 감사드립니다)
ReflectionFunction을 사용하라는 제안을 확장하면 다음과 같이 사용할 수 있습니다.
$func = new ReflectionFunction('myfunction');
$filename = $func->getFileName();
$start_line = $func->getStartLine() - 1; // it's actually - 1, otherwise you wont get the function() block
$end_line = $func->getEndLine();
$length = $end_line - $start_line;
$source = file($filename);
$body = implode("", array_slice($source, $start_line, $length));
print_r($body);
함수의 실제 코드를 제공하는 것은 없습니다. 사용 가능한 것에 가까운 유일한 것은 ReflectionFunction 클래스입니다. 클래스의 경우 클래스 멤버 (상수, 변수 및 메서드)와 해당 가시성을 제공하는 ReflectionClass 가 있지만 실제 코드는 없습니다.
해결 방법 (소스 파일 읽기 포함) : ReflectionFunction :: export 를
사용 하여 함수가 선언 된 파일 이름과 줄 간격을 찾은 다음 해당 줄에서 해당 파일의 내용을 읽습니다. 문자열 처리를 사용하여 첫 번째 와 마지막 사이의 내용을 가져옵니다 .{
}
참고 : Reflection API는 제대로 문서화되어 있지 않습니다.
우리는 다른 운영 체제, gnu / linux, windows, mac을 통해 프로그래밍합니다 ... 이로 인해 코드에 다른 캐리지 리턴이 있습니다.이 문제를 해결하기 위해 Brandon Horsley의 답변을 포크하고 다른 CR을 확인하고 코드를 가져올 준비를합니다. 함수 대신 클래스의 메서드 :
$cn = 'class_example';
$method = 'method_example';
$func = new ReflectionMethod($cn, $method);
$f = $func->getFileName();
$start_line = $func->getStartLine() - 1;
$end_line = $func->getEndLine();
$length = $end_line - $start_line;
$source = file($f);
$source = implode('', array_slice($source, 0, count($source)));
// $source = preg_split("/(\n|\r\n|\r)/", $source);
$source = preg_split("/".PHP_EOL."/", $source);
$body = '';
for($i=$start_line; $i<$end_line; $i++)
$body.="{$source[$i]}\n";
echo $body;
감사합니다, 최종 기능
function get_function($method,$class=null){
if (!empty($class)) $func = new ReflectionMethod($class, $method);
else $func = new ReflectionFunction($method);
$f = $func->getFileName();
$start_line = $func->getStartLine() - 1;
$end_line = $func->getEndLine();
$length = $end_line - $start_line;
$source = file($f);
$source = implode('', array_slice($source, 0, count($source)));
$source = preg_split("/".PHP_EOL."/", $source);
$body = '';
for($i=$start_line; $i<$end_line; $i++)
$body.="{$source[$i]}\n";
return $body;
}
참조 URL : https://stackoverflow.com/questions/7026690/reconstruct-get-code-of-php-function
'IT story' 카테고리의 다른 글
.net에서 유형 안전이란 무엇입니까? (0) | 2020.12.30 |
---|---|
C # 정적 클래스 확장 메서드가 지원되지 않는 이유는 무엇입니까? (0) | 2020.12.30 |
"네임 스페이스에 정의 된 요소는 비공개, 보호 또는 보호 내부로 명시 적으로 선언 할 수 없습니다."오류 (0) | 2020.12.30 |
파이썬은 다중 코어에서 실행할 수 있습니까? (0) | 2020.12.30 |
org.eclipse.m2e : lifecycle-mapping에 대한 POM을 찾을 수 없음 경고 제거 (0) | 2020.12.30 |