2012-01-10 2 views
2

클래스 이름이 있습니다. 클래스가 인스턴스화하지 않고 다른 클래스를 상속하는지 확인하는 방법은 무엇입니까?[PHP] 클래스가 인스턴스화하지 않고 다른 클래스를 상속하는지 확인하는 방법은 무엇입니까?

if (!class_exists($controller)) //AND I have check type 
     { 

      $objectController = new IndexController(); 
      $objectController->index(); 
     } 
+1

당신이 http://stackoverflow.com/questions/1836782/a-function-to-determine-whether- 같은 것을 살펴 보았다 one-type-extend-or-inherits-another-in-php – jprofitt

+0

The Fine Manual은 충분히 유용하지 않습니까? http://php.net/manual/en/function.is-a.php – Piskvor

+0

개체를 만들지 않고 유형을 확인해야합니다. – BILL

답변

-1

는 그것을 위해 반사를 사용해야합니다, 그것은 꽤 큰 항목의 당신 : doc 후 약간의

http://ca.php.net/manual/fr/book.reflection.php

봐, 뭔가를 시도하고 당신은 여전히 ​​질문이있는 경우,보다 정확한 뭔가 그런 다음 해당 주제에 대한 다른 질문을 게시하십시오.

+0

투표가 아니라, 더 나은 답변이 있기 때문에 투표가 없습니다. – Seti

+0

대답이 전혀 나쁘지 않다면, 그것을 downvote해서는 안됩니다, 당신은 그것을 upvote하고 좋은 것들 upvote하지 말았어야 ... 저자는 잘못된 대답을 선택하고 나를 위해 아무것도 벌을 때문에 나를 잃게 만들고있다 ... 내 두 센트 –

+0

실제로 문제는 stackoverflow에 있습니다. 목록의 맨 위에있는 대답은 대부분의 upvotes가있는 것이어야합니다. 나는 간단한 대답을 찾기 위해 여기에 왔고, 평소처럼 나는 선택된 대답을 본다. 하지만 실제로 필요한 것은 is_subclass_of입니다. 간단하고 빠르며 작업을 수행합니다. – NickSoft

5

나는 이것이 지금 구글에서 최고라고 평가되지만, 리플렉션에 대한 대안을 찾고있는 동안 나를 데려왔다. 아무 것도 찾지 못한 후에, 여기에 모두 예제를 게시하기로 결정했습니다.

리플렉션을 사용하면이 작업을 수행 할 수 있습니다. 리플렉션에 너무 의존하지 마십시오. 리소스 집약적 일 수 있습니다.

class TestA {} 
class TestB extends TestA {} 
class TestC extends TestA {} 

$reflector = new ReflectionClass('TestA'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // false 

$reflector = new ReflectionClass('TestB'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // true 

$reflector = new ReflectionClass('TestC'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // false 

수준의 반사에 대한 추가 정보를 원하시면, http://php.net/reflection

+0

마지막 결과는 TestC가 TestA를 확장 할 때 "false"가 아니라 "true"를 반환합니다. 또한, TestD가 TestB를 확장하면, (새로운 ReflectionClass ('TestD')) -> isSubclassOf ('TestA'); "true"를 반환해야합니다. – niconoe

14

슈퍼 오래된 질문을 참조 일반적으로 반사에 대한 추가 정보를 원하시면 http://www.php.net/manual/en/class.reflectionclass.php

를 볼 수 있지만 다시 잘 인터넷 검색을합니다.

당신은 is_subclass_of 사용할 수 있습니다

http://php.net/manual/en/function.is-subclass-of.php

class TestA {} 
class TestB extends TestA {} 
class TestC extends TestB {} 

var_dump(is_subclass_of('TestA', 'TestA')); // false 
var_dump(is_subclass_of('TestB', 'TestA')); // true 
var_dump(is_subclass_of('TestC', 'TestA')); // true 
+1

클래스 이름이없는 경우 is_subclass_of가 자동 로더를 호출한다는 점에 유의할 필요가 있습니다. 세 번째 매개 변수가 FALSE이면 첫 번째 매개 변수로 문자열을 제공 할 수 없습니다. – TechNyquist

관련 문제