Prüfen Sie, ob es eine Eigenschaft gibt, die auf magisch-set Eigenschaften

Es gibt eine Menge von Fragen über das Thema, insbesondere diese eine, aber es hilft mir nicht.

Gibt es eine Mehrdeutigkeit zwischen property_exists und isset also, bevor Sie Fragen, meine Frage, werde ich darauf hinzuweisen:

property_exists

property_exists prüft, ob ein Objekt enthält eine Eigenschaft, ohne zu suchen am Wert, Sie sieht nur seine Sichtbarkeit.

So im folgenden Beispiel:

<?php

class testA
{
  private $a = null;
}
class testB extends testA
{
}

$test = new testA();
echo var_dump(property_exists($test, 'a')); //true

//parent's private property becomes invisible for its child

$test = new testB();
echo var_dump(property_exists($test, 'a')); //false

isset

isset prüft, ob ein Wert vorhanden ist, in einer Eigenschaft, wenn man bedenkt, dass wird nicht gesetzt, wenn ein Wert gleich false und null.

<?php

$var = null;
echo var_dump(isset($var)); //false

$var = '';
echo var_dump(isset($var)); //true

$var = false;
echo var_dump(isset($var)); //true

$var = 0;
echo var_dump(isset($var)); //true

$var = '0';
echo var_dump(isset($var)); //true

isset und property_exists's Verhalten auf Magische Weise Hinzugefügt Eigenschaften

Einer Eigenschaft bestehen kann, mit einem null Wert, so kann ich nicht verwenden __isset Magische Methode wissen, ob eine Eigenschaft vorhanden ist oder nicht. Ich kann mir auch nicht verwenden property_exists als Eigenschaften Hinzugefügt werden, mithilfe von magischen Praktiken.

Hier ist ein Beispiel, aber dies ist nur ein Beispiel, weil in meiner app, Eigenschaften magisch-set gespeichert sind, außerhalb des Objekts.

class test {

    private $data = array();

    public function __get($key) {
        echo "get $key\n";
        return array_key_exists($key, $data) ? $data[$key] : null;
    }

    public function __set($key, $value) {
        echo "set $key = $value\n";
        $this->data[$key] = $value;
    }

    public function __isset($key) {
       echo sprintf("isset $key ( returns %b )", isset($this->data[$key]));
       return isset($this->data[$key]);
    }

}

$test = new test();
$test->x = 42;
isset($test->x); //1

$test->y = null;
isset($test->y); //0
property_exists($test, 'y'); //0

So, hier ist meine Frage :

Gibt es eine Magische Methode oder ein SPL-interface zu implementieren property_exist mit magisch-Eigenschaften Hinzugefügt ?

  • Vorschlag: verwenden Sie var_dump(), nicht echo sprintf....
  • Auch printf macht genau echo sprintf
Schreibe einen Kommentar