2014-05-10 5 views
-1

클래스 상수 (PHP 5.5)를 얻기 위해 범위 연산자와 함께 객체 연산자를 사용하려는 간단한 예제 코드가 있습니다.PHP - 다른 객체에 this와 액세스 객체 const

이 코드는 PHP 5.5.12에서 테스트되었으며,이 질문에서 이전 PHP 버전과의 호환성에는 신경 쓰지 않습니다.

질문은입니다. 개체가 (4)와 같이 다른 클래스의 속성으로 설정되고 const this와 함께 $ this를 사용하려는 경우 개체 const에 액세스 할 수 있습니까? 1과 2는 분명히 작동하지만, 3에서의 간단한 할당은 작동하지만 하나의 추가 라인을 만듭니다.

을 부인할만한 이유가 없거나 간단한 PHP 개발자가 결정했거나 간단하게 작동하지 않는 것을 잊었습니까? 내게는 4가 작동하지 않지만 3은 아무런 문제없이 작동한다는 것이 이상합니다.

+0

먼저 실수를해야합니다. 상수는 _instance_ entity가 아닌 _class_ entity로 정의됩니다. PHP가 인스턴스의 참조 해제를 허용하더라도 인스턴스 "상수"를 참조하려는 경우 논리에 오류가 발생합니다. 그래서 PHP가 여기에 오류가 있다면 (분명히 가지고 있습니다), 인스턴스에 의한 클래스 상수의 참조 해제가 허용되며 다른 클래스의 속성 홀더를 통한 그러한 참조 해제는 불가능합니다. –

+1

어쩌면 ,이 예제에서는 논리에 대해서만 생각하고있는 것은 아닙니다. 오히려 제 3의 경우와 제 4의 경우가 왜 다른지에 대한 것입니다. 어느 쪽이든 둘 다 작동해야하거나 또는 내 생각에 그들 둘 다 안된다. –

답변

1

질문에 대한 답은 네 가지입니다. 그러나 된 threee 라운드에 대한 방법 중 하나를 사용하여 : IMO

$tmp = $this->property; 
return $tmp::MY_CONST; 

또는, 더 직관적 비트 :

$class = get_class($this->property); 
return $class::MY_CONST; 

는이 일을 다른 방법은 다음과 같습니다

$r = new RefletionClass($this->property); 
return $r->getConstant('MY_CONSTANT'); 

코드가 파서 오류를 생성하는 이유에 대해서는 100 % 확신 할 수 없습니다. 그러나 PHP 문법은 매우 복잡하고 다소 복잡합니다.
그래도 $this->foo::BAR은 구문 분석 오류를 설명하는 구문 분석기를 위로 이동시키는식이라는 것을 알기에는 열중하지 않을 것입니다.

+0

이 솔루션은 3 번째 케이스보다 훨씬 복잡하므로 가장 좋은 솔루션은 아니지만 (아마도 유일한 것일 수도 있습니다). –

+0

@ MarcinNabiałek : 죄송합니다. 게시 한 코드에서 이미 작동하고 있다는 것을 눈치 채지 못했습니다. –

관련 문제