Ce face class_exists / interface_exists / enum_exists
class_exists returnează true dacă există o clasă cu numele dat. Numele nu ține cont de majuscule și trebuie scris complet, cu namespace ("App\\Modele\\Produs").
Implicit, dacă clasa nu este încă încărcată, funcția pornește autoloader-ul (spl_autoload_register). Cu al doilea parametru false, verifică doar clasele deja încărcate.
Pentru celelalte tipuri există funcții separate: interface_exists, enum_exists și trait_exists. Atenție: un enum este și clasă, deci class_exists returnează true pentru un enum, dar false pentru o interfață.
Parametri
| Parametru | Descriere |
|---|---|
$class |
Numele clasei, cu namespace. |
$autoload |
Opțional. false ca să nu pornească autoloader-ul. |
Ce returnează
true sau false.
Exemple
Exemplul 1: Clase, interfețe și enum-uri
<?php
interface Exportabil {}
class Raport implements Exportabil {}
enum Format: string { case Pdf = "pdf"; }
var_dump(class_exists("Raport"));
var_dump(class_exists("raport"));
var_dump(class_exists("Exportabil"));
var_dump(interface_exists("Exportabil"));
var_dump(class_exists("Format"));
var_dump(enum_exists("Format"));
Rezultat
bool(true)
bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
Exemplul 2: Alegerea unei clase după o setare
<?php
class ExportCsv { public function ruleaza() { return "Export CSV gata"; } }
class ExportPdf { public function ruleaza() { return "Export PDF gata"; } }
foreach (["csv", "pdf", "xls"] as $format) {
$clasa = "Export" . ucfirst($format);
echo class_exists($clasa) ? (new $clasa())->ruleaza() : "Format necunoscut: $format";
echo "\n";
}
Rezultat
Export CSV gata
Export PDF gata
Format necunoscut: xls
Greșeli frecvente
- Dai numele scurt al unei clase dintr-un namespace.
usenu contează pentru textul dat funcției: scrie numele complet sau foloseșteProdus::class. - Construiești numele clasei din date primite de la utilizator, fără o listă de clase permise. Cineva poate instanția orice clasă din aplicație.
Comenzi înrudite
function_exists: Verifică dacă o funcție există: una din PHP, dintr-o extensie sau definită de tine.method_exists: Verifică dacă o clasă sau un obiect are o metodă cu un anumit nume.spl_autoload_register: Înregistrează o funcție care încarcă automat fișierul unei clase prima dată când clasa este folosită.interface / implements: O interfață este o listă de metode pe care o clasă promite să le aibă. Clasa le scrie cu implements.enum: Definește un tip cu un set fix de valori posibile, de exemplu statusurile unei comenzi.