Heim >Backend-Entwicklung >PHP-Problem >So greifen Sie auf Objekte im PHP-Array zu

So greifen Sie auf Objekte im PHP-Array zu

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-09-28 11:17:113288Durchsuche

So greifen Sie auf Objekte im PHP-Array zu

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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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[&#39;one&#39;]);

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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn