is_a / is_subclass_of în PHP

Clase și obiecte PHP 4.2+ (nume de clasă ca text: PHP 5.3.9+)

Verifică dacă un obiect este de o clasă sau o moștenește (is_a). is_subclass_of exclude clasa însăși.

Sintaxă
is_a(mixed $object_or_class, string $class, bool $allow_string = false): bool

Ce face is_a / is_subclass_of

is_a($obiect, "Clasa") face același lucru ca $obiect instanceof Clasa, dar primește numele clasei ca text. Cu $allow_string = true poate primi în loc de obiect și numele unei clase, ca text.

is_subclass_of returnează true doar dacă obiectul (sau clasa) extinde clasa dată sau implementează interfața dată, nu și dacă este chiar acea clasă. Atenție: la is_subclass_of, $allow_string este implicit true.

Parametri

Parametru Descriere
$object_or_class Obiectul verificat sau, cu $allow_string, numele unei clase.
$class Numele clasei sau interfeței cu care se compară.
$allow_string Opțional. true permite un nume de clasă ca prim parametru.

Ce returnează

true sau false.

Exemple

Exemplul 1: is_a și is_subclass_of

<?php
class Utilizator {}
class Admin extends Utilizator {}

$a = new Admin();

var_dump(is_a($a, "Utilizator"));
var_dump(is_a($a, "Admin"));
var_dump(is_subclass_of($a, "Admin"));
var_dump(is_subclass_of($a, "Utilizator"));

Rezultat

bool(true)
bool(true)
bool(false)
bool(true)

Exemplul 2: Verificarea unei clase după nume

Util când ai doar numele clasei, de exemplu dintr-un fișier de configurare, și nu vrei să creezi obiectul.

<?php
interface Modul {}
class ModulBlog implements Modul {}
class Ajutor {}

foreach (["ModulBlog", "Ajutor"] as $clasa) {
    $ok = is_a($clasa, Modul::class, true);
    echo $clasa . ": " . ($ok ? "modul valid" : "nu este modul") . "\n";
}

Rezultat

ModulBlog: modul valid
Ajutor: nu este modul

Greșeli frecvente

  • Dai un nume de clasă ca text fără al treilea parametru: is_a("Admin", "Utilizator") returnează false. Adaugă true.

Comenzi înrudite