http://www.dmbremen.com

                                                                  【大发11选5注册】php数组中对象如何访问-PHP问题

                                                                  如果在未做任何处理的情况下, 以数组的方式访问对象,会抛给你一个大大的错误。

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

                                                                  当然如果你对类进行一些改造的话,还是可以像数组一样访问。

                                                                  如何访问受保护的对象属性

                                                                  在正式改造之前,先看另一个问题。当我们试图访问一个受保护的属性的时候,也会抛出一个大大的错误。

                                                                  Fatal error: Uncaug)ht Error: Cannot access private property Test::$container

                                                                  是不是受保护属性就不能获取?当然不是,如果我们想要获取受保护的属性,我们可以借助魔术方法__get。

                                                                  相关推荐:《php数组》

                                                                  DEMO1

                                                                  获取私有属性

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

                                                                  获取私有属性下对应键名的键值。

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

                                                                  如何以数组的方式访问对象

                                                                  我们需要借助预定义接口中的ArrayAccess接口来实现。接口中有4个抽象方法,需要我们实现。

                                                                  <?phpclass Test implements ArrayAccess{    private $container = [];    public function __construct()    {        $this->container = ['one]9;=>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']);

                                                                  如何遍历对象

                                                                  其实对象在不做任何处理的情况下,也可以被遍历,但是只能遍历可见属性,也就是定义为public的属性。我们可以借助另一个预定义接口IteratorAggregate,来实现更为可控的对象遍历。

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:华为云郑叶来:B端生意难挣快钱,曾被任正非批别保守 - 华为云,郑叶来
                                                                  下一篇:没有了