Wenn Sie ohne Verarbeitung auf ein Objekt als Array zugreifen, wird Ihnen ein großer Fehler angezeigt.
Fatal error: Uncaught Error: Cannot use object of type Test as array
Wenn Sie einige Änderungen an der Klasse vornehmen, können Sie natürlich immer noch wie auf ein Array darauf zugreifen.
So greifen Sie auf die Eigenschaften geschützter Objekte zu
Vor der formalen Transformation schauen wir uns eine andere Frage an. Ein großer Fehler wird auch ausgegeben, wenn wir versuchen, auf eine geschützte Eigenschaft zuzugreifen.
Fatal error: Uncaught Error: Cannot access private property Test::$container
Ist es ein geschütztes Attribut, das nicht abgerufen werden kann? Natürlich nicht, wenn wir ein geschütztes Attribut erhalten möchten, können wir die magische Methode __get verwenden.
Verwandte Empfehlungen: „php array“
DEMO1
Private Attribute abrufen
<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return property_exists($this, $name) ? $this->$name : null; } } $test = new Test(); var_dump($test->container);
DEMO2
Rufen Sie den Schlüsselwert des entsprechenden Schlüsselnamens unter dem privaten Attribut ab.
<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return array_key_exists($name, $this->container) ? $this->container[$name] : null; } } $test = new Test(); var_dump($test->one);
So greifen Sie auf Objekte als Array zu
Um dies zu erreichen, müssen wir die ArrayAccess-Schnittstelle in der vordefinierten Schnittstelle verwenden. Es gibt 4 abstrakte Methoden in der Schnittstelle, die wir implementieren müssen.
<?php class Test implements ArrayAccess { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetGet($offset){ return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function offsetSet($offset, $value) { if(is_null($offset)){ $this->container[] = $value; }else{ $this->container[$offset] = $value; } } public function offsetUnset($offset){ unset($this->container[$offset]); } } $test = new Test(); var_dump($test['one']);
So durchlaufen Sie Objekte
Tatsächlich können Objekte auch ohne Verarbeitung durchlaufen werden, es können jedoch nur sichtbare Eigenschaften durchlaufen werden, die als öffentliche Eigenschaften definiert sind. Wir können eine andere vordefinierte Schnittstelle IteratorAggregate verwenden, um eine besser kontrollierbare Objektdurchquerung zu erreichen.
<?php class Test implements IteratorAggregate { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function getIterator() { return new ArrayIterator($this->container); } } $test = new Test(); foreach ($test as $k => $v) { var_dump($k, $v); }
Das obige ist der detaillierte Inhalt vonSo greifen Sie auf Objekte im PHP-Array zu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!