Home  >  Article  >  Backend Development  >  How to access objects in php array

How to access objects in php array

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

How to access objects in php array

If you access an object as an array without any processing, a big error will be thrown to you.

Fatal error: Uncaught Error: Cannot use object of type Test as array

Of course, if you make some modifications to the class, you can still access it like an array.

How to access protected object properties

Before the formal transformation, let’s look at another question. A big error will also be thrown when we try to access a protected property.

Fatal error: Uncaught Error: Cannot access private property Test::$container

Is it true that protected attributes cannot be obtained? Of course not, if we want to get a protected attribute, we can use the magic method __get.

Related recommendations: "php array"

DEMO1

Get private attributes

<?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

Get the key value of the corresponding key name under the private attribute.

<?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);

How to access objects as an array

We need to use the ArrayAccess interface in the predefined interface to achieve this. There are 4 abstract methods in the interface that we need to implement.

<?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;]);

How to traverse objects

In fact, objects can also be traversed without any processing, but only visible properties can be traversed, which is defined as public properties. We can use another predefined interface IteratorAggregate to achieve more controllable object traversal.

<?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);
}

The above is the detailed content of How to access objects in php array. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn