Ce face method_exists
method_exists primește un obiect sau numele unei clase și numele metodei. Returnează true dacă metoda este definită, indiferent de vizibilitate (inclusiv private) și inclusiv dacă este moștenită.
Numele metodelor nu țin cont de majuscule în PHP, deci nici verificarea. Metodele „virtuale” tratate prin __call nu sunt găsite. Dacă vrei să știi dacă poți apela efectiv metoda din locul curent, folosește is_callable([$obiect, "metoda"]).
Parametri
| Parametru | Descriere |
|---|---|
$object_or_class |
Obiectul sau numele clasei. |
$method |
Numele metodei căutate. |
Ce returnează
true dacă metoda există, altfel false.
Exemple
Exemplul 1: Verificări simple
<?php
class Raport
{
public function exportPdf() {}
private function calculeaza() {}
}
var_dump(method_exists("Raport", "exportPdf"));
var_dump(method_exists(new Raport(), "EXPORTPDF"));
var_dump(method_exists("Raport", "calculeaza"));
var_dump(is_callable([new Raport(), "calculeaza"]));
var_dump(method_exists("Raport", "exportCsv"));
Rezultat
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
Exemplul 2: Funcționalitate opțională
<?php
class Articol
{
public function titlu(): string { return "Ghid PHP"; }
public function rezumat(): string { return "Primii pași în PHP."; }
}
class Pagina
{
public function titlu(): string { return "Contact"; }
}
foreach ([new Articol(), new Pagina()] as $element) {
echo $element->titlu();
if (method_exists($element, "rezumat")) {
echo " - " . $element->rezumat();
}
echo "\n";
}
Rezultat
Ghid PHP - Primii pași în PHP.
Contact
Greșeli frecvente
- Folosești
method_existsca să decizi dacă poți apela o metodă din afara clasei. Funcția returneazătrueși pentru metode private, iar apelul aruncă apoiError. Foloseșteis_callable.
Comenzi înrudite
property_exists: Verifică dacă o clasă sau un obiect are o proprietate, chiar dacă valoarea ei este null.function_exists: Verifică dacă o funcție există: una din PHP, dintr-o extensie sau definită de tine.class_exists / interface_exists / enum_exists: Verifică dacă o clasă (class_exists), o interfață sau un enum a fost definit.call_user_func / call_user_func_array: Apelează o funcție dată printr-o variabilă (nume, closure sau metodă), cu argumentele primite.