A function to determine whether one type extends o

2019-09-12 04:00发布

Is there a way in PHP to know if one class inherits another?

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

标签: php oop
3条回答
爷、活的狠高调
2楼-- · 2019-09-12 04:41

Yes, you can use

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

EDIT: As far as I know, this should even work for interfaces...

查看更多
男人必须洒脱
3楼-- · 2019-09-12 04:44

You need to use instanceof.

Note that implements is incorrect. instanceof should be used in both cases (checking whether an object is an inherited class, or whether the object implements an interface).

Example from manual:

<?php
interface MyInterface
{
}

class MyClass implements MyInterface
{
}

$a = new MyClass;

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

gives:

bool(true)
bool(true)
查看更多
Rolldiameter
4楼-- · 2019-09-12 04:51

May I recomment the instanceof operator?

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)
查看更多
登录 后发表回答