2012-04-09 2 views
1

나는 이것이 bug 또는 wrong implementation 있는지 확인하려고하고 ..... 알고 싶은 것 class_existPHP 클래스 이상한 행동

내 클래스

namespace servers\testing ; 

class HelloWord 
{ 
    function hello() 
    { 
     echo "hello World" ; 
    } 
} 

테스트

use servers\testing\HelloWord as OkWorld ; 

$okWolrd = new OkWorld() ; 
$helloWorld = new \servers\testing\HelloWord() ; 

var_dump($okWolrd); //object(servers\testing\HelloWord)[1] 
var_dump(class_exists('servers\testing\HelloWord')); //true 
var_dump(class_exists('OkWorld')); //false 


$declearedClasses = get_declared_classes() ; 

var_dump(in_array('servers\testing\HelloWord', $declearedClasses)); //true 
var_dump(in_array('OkWorld', $declearedClasses)); //false 


var_dump($okWolrd instanceof $helloWorld); //true but OkWolrd needed to be initiated before it works 
경우

질문

OkWord 유효한 PHP 클래스가 아닙니다. new OkWorld()이 정상적으로 작동합니다.

감속없이 OkWord이 있는지 확인하려면 어떻게합니까?

편집 한

내가 OkWorldalias하지만 유효한 클래스가 servers\testing\HelloWord에의 참조입니다 알고 ...

감사

+1

부정적 투표가 있다면 부탁드립니다. 이유에 대한 의견을 보내 주시면 감사하겠습니다. 고마워요 – Baba

답변

3

가 나는 버그 나 잘못된 구현도 생각합니다.

OKWorld은 클래스가 아니며 별칭입니다. 해석기는 존재할 때마다 HelloWord으로 바꿉니다. 하지만 인터프리터는 문자열을 검색하지 않으므로 class_exists 함수는 문자열 OKWorld을 가져 와서 실제로 존재하지 않는 해당 클래스를 검색합니다! 실제로 존재하는 것은 별칭입니다.

0

OkWorld 클래스 아니다; 네임 스페이스 별칭입니다. 실제 수업은 HelloWord입니다. OkWorld 경우 확인하기위한 false를 반환

+1

알아요 ... 문제는 별칭이 존재하는지 여부를 확인하는 방법입니다. 유효한 클래스로 취급되기 때문에 – Baba

+0

@Baba : 별칭이 있는지 테스트하려는 이유는 무엇입니까? 무엇을 성취하려고합니까? AFAIK는 리플렉션을 통해서만 수행 할 수 있습니다. – FtDRbwLXw6

+0

이미징을 사용하면 사용자가 클래스를 원격으로 가리켜 야하는 REST 서비스가 있습니다 ... 네임 스페이스를 사용하지 않고 별칭을 사용하는 클리너 ... ... 또 다른 예입니다. 개발하고 자동로드하려는 경우 클래스의 .. 그리고 전체 경로 대신 앨리어스가 사용됩니다. 무엇이 발생합니까? – Baba

2

OkWorld 별칭이 아닌 실제 클래스이기 때문에 클래스이 유효하다. 대신 instanceof를 사용하여 시도 할 수 있습니다 :

// Not sure if this works (haven't used namespace aliases yet) 
//var_dump('OkWorld' instanceof HelloWorld); // No GOOD - Throws fatal 

// This will work 
$okWorld = new OkWorld(); 
var_dump($okWorld instanceof HelloWorld); 
+0

나는'별칭'이라는 것에 동의하지만 여러분의 코드는'OKWord'만이 유효 할 때만 유효하다. – Baba

+0

@Baba : 고마워, 잡아서 업데이트했다. –

+0

@MikePurcell 첫 번째 치명적인 던졌습니다 (instanceof 기대 인스턴스) – poncha