So greifen Sie auf Objekte im PHP-Array zu

爱喝马黛茶的安东尼
Freigeben: 2023-02-25 11:38:01
Original
3274 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;]);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage