У меня есть имя класса. Как проверить, наследует ли класс другой класс, не создавая его?
if (!class_exists($controller)) //AND I have check type { $objectController = new IndexController(); $objectController->index(); }
Вы должны будете использовать отражение для этого, это довольно большая тема:
http://ca.php.net/manual/fr/book.reflection.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
Я знаю, что это старый вопрос, хотя сейчас он высоко оценивает Google и привел меня сюда, ища альтернативу размышлениям. После того, как я ничего не нашел, я решил опубликовать рабочий пример для всех здесь.
Вы можете сделать это, используя отражение. Старайтесь не слишком полагаться на размышления, так как это может быть ресурсоемким.
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://www.php.net/manual/en/class.reflectionclass.php
Для получения дополнительной информации об отражении в целом см. http://php.net/reflection