2011-10-17 2 views
5

클래스를 포함/요구하지 않고 파일 내에 클래스가 있는지 확인하는 방법이 있습니까?클래스가 파일을 필요로하지 않고/포함하지 않고 있는지 확인하십시오.

같은

뭔가 : class_in_file($file);

이미,이는 class_exists($class);을 찾고 다음/필요로하는 클래스를 포함하고 함께 할 수있어 언급 한 바와 같이

하지만, 다른 방법?

+0

그럼에도 불구하고 아직도 파일에 클래스가 있는지 확인해야합니다. 그렇지 않으면 어떻게 알 수 있습니까? class_in_file이 있다면 파일을 읽어야합니다. – Flukey

+2

왜 그렇게 생각하는지 설명하면 사람들에게 많은 도움이됩니다. – CodeCaster

+0

@Jamie 나는 그가'include'와'require'를 의미한다고 생각하는데, 이는 단지 파일을 읽는 것과는 다릅니다. – deceze

답변

9
$tokens = token_get_all(file_get_contents('foo.php')); 

그런 다음 토큰을 통해 특정 T_CLASS 항목을 발견 할 수 있는지 확인하십시오.

http://www.php.net/manual/en/function.token-get-all.php
http://www.php.net/manual/en/tokens.php

+0

나는 그 기능을 놓쳤다. 그들은 훌륭했다. 해당 정보를 주셔서 감사합니다 – Eineki

+0

현명한 성능, 포함/파일을 요구와의 차이점은 무엇입니까? 두 방법 모두 전체 파일을로드해야한다고 생각합니다. – olanod

+0

@ Dan 파일을 포함한 현명한 성능은 훨씬 빠릅니다. 그러나 OP는 분명히 그렇게하고 싶지 않습니다. – deceze

0

PHP는 정의 된 파일을로드 (파싱) 한 경우에만 존재하는 클래스를 알고 있습니다 (내장되어 있지 않은 것으로 가정). 구조가 명확히 정의되어 있다면 (자동 로딩을 사용하는 것일 수도 있습니다), 클래스를 정의하는 파일이 존재하는지 여부 만 확인하면 클래스가 존재하는지 확인할 수 있습니다. 예 : if (file_exists('<path to app>/lib/Myapp/Util/Http.php'))은 앱 디렉토리에 Myapp_Util_Http 클래스가 있는지 확인하는 데 사용할 수 있습니다. 실제로 클래스가 실제로 클래스에 있다는 것을 보증하지 않습니다. 당신은 그것을 포함하거나 필요로하거나 읽거나 파싱해야하거나, 자동 로딩을 사용하고 그것을 사용해보십시오.

2

PHP 파일은 텍스트 파일이므로 열어서 구문 분석하여 클래스 선언을 찾을 수 있습니다.

간단한 프로세스는 아니지만 좋은 구문 분석기는 작업을 사소한 것으로 만들어야합니다.

주석 처리 된 줄을 삭제해야합니다. 클래스 선언이 포함 된 문자열은 잘못된 결과를 유발할 수 있습니다. heredocs는 일을 더 복잡하게 만듭니다. Evals도 고려해야합니다.

명령 줄 PHP 인터프리터에 액세스 할 수 있다면 yw 작업의 좋은 반을 수행하는 주석과 공백을 제거하는 -w 스위치를 사용할 수 있습니다.

1

짧은 대답은 no입니다. 해결 방법 만 있습니다. 예를 들어, 당신은 (아마도 token_get_all를 사용하여) 파일을 직접 분석 할 수있는, 혹은

<?php 
/** #has_class(CLASSNAME) 
*/ 

같은 상단에 코멘트와 함께 어떻게 든 파일을 표시하고 preg_match로이 찾고 처음 몇 줄을 읽어 보시기 바랍니다.

관련 문제