2017-12-11 24 views
0

는 기본 클래스는 stdClass, 모든 더 클래스는 그 클래스의 아이들, 그리고 정의 된 다른 클래스가없는 곳에는 대부분의 경우에 반환 된 기본 개체입니다.클래스 stdClass와 동일한 루트 인터페이스 또는 특성이 있습니까? PHP에서

유사한 또는 뭔가처럼 동등한 시스템이 해당 인터페이스를 정의가있는 경우 내 질문이 먼저인가?

둘째, 일반적인 특성 정의하는 시스템이있다? 이것이 가능성이 적기를 기대하지만, 약간의 확인 없이는 그것을 배제하지 않을 것입니다.

나도 같은 구조를 인식하지 오전, 그리고 하나 또는이 질문에 대한 특정 참조하기 전에 요청을 받고 찾을 수 없습니다. 하나 또는 둘 다 사용할 수있는 경우 유용 할 수 있습니다. 미리 감사드립니다.

편집 :으로는 stdClass는 루트 클래스가 아니라 단지 일반 객체이며, decezementioned elsewhere also에 의해 지적했다.

+0

, 혹시 필요를 인터페이스가 다른 (루트) 인터페이스의 'instanceof'인지 테스트하려면? – deceze

+0

반사의 무게를 피하고, 공통 인터페이스의 지역화 된 확장은 PSR 표준을 상속하고 추가 패키지 특정 기능이나 뭔가를 추가하는 인터페이스를 생성 같은 사람으로 존재하는지 확인합니다. 책임의 패키지 영역이 객체를 인스턴스화하거나 피할 수 있다면 반사체를 발사하지 않고서 무엇을 알기를 원하는 경우가 있습니다. – mopsyd

+0

예를 들어, 이미 다른 패키지를 추가하지 않고 디스크 공간을 추가로 확장 할 필요없이 자산이 이미 다른 일부 패키지의 종속성으로 추가 된 매우 큰 프로젝트에서 문제를 처리 할 수 ​​있는지 파악합니다. 어떤 경우에는 이것을 통해 긁히는 것이 꽤 무거울 것이고 가능하다면 약간의 메모리를 절약 할 것입니다. – mopsyd

답변

1

은 PHP에는 stdInterface 또는 stdTrait 없습니다하지만 당신은 변수가 인터페이스 또는 특성, 전 경우 테스트 interface_existstrait_exists를 사용할 수 있습니다

<?php 
trait X {} 
interface Y {} 

var_export(interface_exists('Y')); 
echo '<br>'; 
var_export(trait_exists('X')); 
//Output: 
//true 
//true 
+0

대부분의 경우 관련 구조가 아직 현재 런타임에서 컴파일되지 않은 경우 해당 함수 및 유사한 함수가 실패합니다. 'instanceof'를 사용하면 일반적으로'spl_autoload'가 강제 실행되지 않습니다. – mopsyd

+0

그게 가능한 옵션이지만, 나는 아직도 당신의 대답을 upvote거야. – mopsyd

1

이 결과, $object instancof \stdClass 것 같이가 항상 true으로 평가하십시오.

그건 완전히 demonstrably입니다.

PHP 아무것도의 엄격한 하향식 계층 구조가없는, 아니 최상위 클래스도없는 최상위 인터페이스 또는 특성이 없습니다.

당신은 그것의 인스턴스 필요없이 클래스 또는 인터페이스가 다른 클래스 또는 인터페이스에 관련이 있는지 여부를 결정하기 위해 is_subclass_of을 사용할 수 있습니다

:

인터페이스 및 특성은 그 자체로 인스턴스화 할 수 없기 때문에
interface Foo {} 

class Bar implements Foo {} 

interface Baz extends Foo {} 

var_dump(is_subclass_of('Bar', 'Foo')); // true 
var_dump(is_subclass_of('Baz', 'Foo')); // true