Daniel A. White
Daniel A. White

Reputation: 191058

A function to determine whether one type extends or inherits another in PHP?

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

Upvotes: 0

Views: 334

Answers (3)

zombat
zombat

Reputation: 94237

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)

Upvotes: 7

Dereleased
Dereleased

Reputation: 10087

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)

Upvotes: 1

Franz
Franz

Reputation: 11553

Yes, you can use

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

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

Upvotes: 2

Related Questions