Функция для определения того, расширяет ли один тип или наследует другой в PHP? - PullRequest
0 голосов
/ 03 декабря 2009

Есть ли в PHP способ узнать, наследует ли один класс другой?

class Controller
{
}

class HomeController extends Controller
{
}

class Dummy
{
}

// What I would like to do

    $result = class_extends('HomeController', 'Controller'); /// true
    $result = class_extends('Dummy', 'Controller'); /// false

Ответы [ 3 ]

7 голосов
/ 03 декабря 2009

Вам нужно использовать instanceof .

Обратите внимание, что implements неверно. instanceof следует использовать в обоих случаях (проверка, является ли объект наследуемым классом или реализует ли объект интерфейс).

Пример из руководства:

<?php
interface MyInterface
{
}

class MyClass implements MyInterface
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

дает:

bool(true)
bool(true)
2 голосов
/ 03 декабря 2009

Да, вы можете использовать

if ($foo instanceof ClassName)
    // do stuff...

РЕДАКТИРОВАТЬ : Насколько я знаю, это должно работать даже для интерфейсов ...

1 голос
/ 03 декабря 2009

Могу ли я порекомендовать оператора instanceof ?

class A { }
class B extends A { }
class C { }

$b = new B;
$c = new C;

var_dump($b instanceof A, $c instanceof A) // bool(true), bool(false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...