Ce face property_exists
property_exists verifică dacă proprietatea este declarată (sau a fost adăugată dinamic pe obiect). Spre deosebire de isset, returnează true și când valoarea este null, și nu ține cont de vizibilitate.
Proprietățile tratate prin __get nu sunt găsite, pentru că nu există cu adevărat.
Parametri
| Parametru | Descriere |
|---|---|
$object_or_class |
Obiectul sau numele clasei. |
$property |
Numele proprietății, fără semnul dolar. |
Ce returnează
true dacă proprietatea există, altfel false.
Exemple
Exemplul 1: Diferența față de isset
<?php
class Profil
{
public ?string $telefon = null;
private string $parola = "x";
}
$p = new Profil();
var_dump(property_exists($p, "telefon"));
var_dump(isset($p->telefon));
var_dump(property_exists("Profil", "parola"));
var_dump(property_exists($p, "email"));
Rezultat
bool(true)
bool(false)
bool(true)
bool(false)
Exemplul 2: Completarea unui obiect dintr-un tablou
Câmpurile care nu există în clasă sunt ignorate, ca să nu apară proprietăți dinamice.
<?php
class Adresa
{
public string $oras = "";
public string $strada = "";
}
$dinFormular = ["oras" => "Cluj", "strada" => "Memorandumului", "admin" => "1"];
$adresa = new Adresa();
foreach ($dinFormular as $camp => $valoare) {
if (property_exists($adresa, $camp)) {
$adresa->$camp = $valoare;
}
}
print_r($adresa);
Rezultat
Adresa Object
(
[oras] => Cluj
[strada] => Memorandumului
)
Greșeli frecvente
- Scrii numele cu dolar:
property_exists($p, "$telefon"). Între ghilimele duble,$telefoneste înlocuit cu valoarea variabilei. Dă numele fără dolar.
Comenzi înrudite
method_exists: Verifică dacă o clasă sau un obiect are o metodă cu un anumit nume.isset: Verifică dacă o variabilă există și nu are valoarea null.get_object_vars: Returnează proprietățile unui obiect și valorile lor, ca tablou asociativ.