How to access objects in php array

爱喝马黛茶的安东尼
Release: 2023-02-25 11:38:01
Original
3282 people have browsed it

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
Copy after login

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
Copy after login

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);
Copy after login

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);
Copy after login

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;]);
Copy after login

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);
}
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template