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
instanceof: Verifică dacă un obiect este de o anumită clasă, extinde acea clasă sau implementează o interfață.get_class / get_parent_class: Returnează numele clasei unui obiect (get_class) sau numele clasei părinte (get_parent_class).class_exists / interface_exists / enum_exists: Verifică dacă o clasă (class_exists), o interfață sau un enum a fost definit.