web-dev-qa-db-de.com

PHP prüft, ob eine Eigenschaft in einem Objekt oder einer Klasse existiert

Ich verstehe PHP hat keine reine Objektvariable, aber ich möchte überprüfen, ob eine Eigenschaft in dem angegebenen Objekt oder der angegebenen Klasse ist.

$ob = (object) array('a' => 1, 'b' => 12); 

oder

$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;

In JS, kann ich dies schreiben, um zu prüfen, ob die Variable a in einem Objekt existiert:

if ('a' in ob)

In PHP, kann so etwas gemacht werden?

Vielen Dank für Ihren Rat.

115
Micah

property_exists (mixed $ class, string $ property

if (property_exists($ob, 'a')) 

isset (mixed $ var [ mixed $ ...])

if (isset($ob->a))

isset () gibt false zurück, wenn die Eigenschaft null ist

Beispiel 1:

$ob->a = null
var_dump(isset($ob->a)); // false

Beispiel 2:

class Foo
{
   public $bar = null;
}

$foo = new Foo();

var_dump(property_exists($foo, 'bar')); // true
var_dump(isset($foo->bar)); // false
181
Peter

Um zu überprüfen, ob die Eigenschaft existiert und ob sie auch null ist, können Sie die Funktion property_exists() verwenden.

Docs: http://php.net/manual/en/function.property-exists.php

Im Gegensatz zu isset () gibt property_exists () TRUE zurück, auch wenn die Eigenschaft den Wert NULL hat.

bool property_exists (mixed $ class, string $ property)

Beispiel:

if (property_exists($testObject, $property)) {
    //do something
}
56
Chiara Perino

Weder isset noch property_exists funktionieren für mich.

  • isset gibt false zurück, wenn die Eigenschaft existiert, aber NULL ist.
  • property_exists gibt true zurück, wenn die Eigenschaft Teil der Klassendefinition des Objekts ist, auch wenn sie nicht festgelegt wurde.

Am Ende ging ich mit:

    $exists = array_key_exists($property, get_object_vars($obj));

Beispiel:

    class Foo {
        public $bar;

        function __construct() {
            $property = 'bar';

            isset($this->$property); // FALSE
            property_exists($this, $property); // TRUE
            array_key_exists($property, get_object_vars($this)); // TRUE

            unset($this->$property);

            isset($this->$property); // FALSE
            property_exists($this, $property); // TRUE
            array_key_exists($property, get_object_vars($this)); // FALSE

            $this->$property = 'baz';

            isset($this->$property); // TRUE
            property_exists($this, $property); // TRUE
            array_key_exists($property, get_object_vars($this));  // TRUE
        }
    }
11
smariot

Wenn Sie wissen möchten, ob eine Eigenschaft in einer Instanz einer von Ihnen definierten Klasse vorhanden ist, kombinieren Sie einfach property_exists() mit isset().

public function hasProperty($property)
{
    return property_exists($this, $property) && isset($this->$property);
}
4

echo $person->middleName ?? 'Person does not have a middle name';

OR

if($person->middleName ?? false) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

Erklärung

Der traditionelle PHP Weg, um die Existenz von etwas zu überprüfen, ist:

if(isset($person->middleName)) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

ODER für eine spezifischere Art und Weise:

if(property_exists($person, 'middleName')) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

Beides ist in langen Anweisungen in Ordnung, aber in ternären Anweisungen werden sie unnötig umständlich. isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';

Sie können dies auch nur mit dem ternären Operator wie folgt erreichen echo $person->middleName ?: 'Person does not have a middle name';, Aber wenn der Wert nicht existiert (nicht gesetzt ist), wird ein E_NOTICE ausgelöst und ist keine bewährte Methode. Wenn der Wert null ist, wird die Ausnahme nicht ausgelöst.

Daher ternärer Operator zur Rettung, der dies zu einer ordentlichen kleinen Antwort macht:

echo $person->middleName ?? 'Person does not have a middle name';

4
Rob

Um zu überprüfen, ob etwas existiert, können Sie die PHP isset () siehe php.net verwenden. Diese Funktion prüft, ob die Variable gesetzt ist und nicht NULL ist.

Beispiel:

if(isset($obj->a))
{ 
  //do something
}

Wenn Sie überprüfen müssen, ob eine Eigenschaft in einer Klasse vorhanden ist, können Sie die eingebaute Funktion property_exists () verwenden

Beispiel:

if (property_exists('class', $property)) {
    //do something
}
1
Tjoene