property_exists în PHP

Verifică dacă o clasă sau un obiect are o proprietate, chiar dacă valoarea ei este null.

Sintaxă
property_exists($object_or_class, string $property): bool

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, $telefon este î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.