is_subclass_of
funkcja
Sprawdza, czy obiekt lub klasa jest podklasą lub implementuje podany interfejs. Zwraca true lub false.
is_subclass_of(mixed $object_or_class, string $class, bool $allow_string = true): bool
is_subclass_of zwraca true, jeśli $object_or_class jest podklasą $class lub implementuje interfejs $class. Sprawdza całą hierarchię dziedziczenia — nie tylko bezpośredniego rodzica. Zwraca false, gdy klasy są identyczne (w odróżnieniu od instanceof, który dla tej samej klasy zwraca true).
Parametr $allow_string (domyślnie true) pozwala podać nazwę klasy jako string zamiast obiektu. Ustaw go na false, jeśli chcesz przyjmować wyłącznie obiekty (zabezpieczenie przed literówkami w nazwach klas).
<?php
declare(strict_types=1);
class Zwierze {}
class Pies extends Zwierze {}
class Labrador extends Pies {}
var_dump(is_subclass_of('Labrador', 'Pies'));
// wynik:
// bool(true)
var_dump(is_subclass_of('Labrador', 'Zwierze'));
// wynik:
// bool(true)
var_dump(is_subclass_of('Pies', 'Labrador'));
// wynik:
// bool(false)
// Działa też z interfejsami:
interface Biegalny {}
class Chart extends Pies implements Biegalny {}
var_dump(is_subclass_of('Chart', 'Biegalny'));
// wynik:
// bool(true)
// Na obiekcie:
$pies = new Labrador();
var_dump(is_subclass_of($pies, 'Zwierze'));
// wynik:
// bool(true)