php数组中对象如何访问

php数组中对象如何访问

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

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

登录后复制

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

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

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

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

登录后复制

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

立即学习“PHP免费学习笔记(深入)”;

相关推荐:《php数组》

DEMO1

获取私有属性

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

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

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个抽象方法,需要我们实现。

container = ['one'=>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,来实现更为可控的对象遍历。

container = ['one'=>1, 'two'=>2, 'three'=>3];    }        public function getIterator() {        return new ArrayIterator($this->container);    }    }$test = new Test();foreach ($test as $k => $v) {    var_dump($k, $v);}

登录后复制

以上就是php数组中对象如何访问的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2525071.html

(0)
上一篇 2025年3月5日 18:03:42
下一篇 2025年3月5日 18:03:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php能生成动态页面内容吗

    php生成动态页面的意思是相对于web 1.0时代的纯html网页而言可以根据不同的条件来生成不同的页面。 在web 1.0时代,网页几乎都是写死了的html文档,访问的时候智能看到固定的内容。(推荐学习:PHP视频教程) 现在用php写动…

    2025年3月5日
    000
  • php能继承多个父类吗

    php没有多继承的特性。即使是一门支持多继承的编程语言,我们也很少会使用这个特性。在大多数人看来,多继承不是一种好的设计方法。 但是开发中用到多继承该怎么办呢? 下面介绍一下使用trait来实现php中多继承的问题。(推荐学习:PHP视频教…

    2025年3月5日
    200
  • php数组怎么导入图片

    本文实例讲述了php获取网页里所有图片并存入数组的方法。分享给大家供大家参考。具体如下: 相关推荐:《php数组》 $images = array();preg_match_all(‘/(img|src)=(“|’)[^”‘>]+/i…

    2025年3月5日
    200
  • php内存的几个区域划分

    内存的几个区域划分 1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。(推荐学习:PHP视频教程) 2、堆区(heap) — 在内存开辟另一块…

    2025年3月5日
    200
  • php用什么服务器系统

    wordpress够流行了吧,它是一个用php编写的强大的博客平台。使用它来架设一个博客平台相关容易,是新手建站比较方便的工具。但是要真正体会wordpress(以下简称wp)强大,插件是不可少的东西。 一般来说,我们不可能想试一个插件就把…

    2025年3月5日
    200
  • php数组如何进行增删查改

    首先我们需要使用我们的sublime来编写一个数组。 我们使用dump看一下这个效果。 立即学习“PHP免费学习笔记(深入)”; 相关推荐:《php数组》 我们来看一下如何增加一个数据吧,我们首先要做的就是使用$a[‘d&#82…

    2025年3月5日 编程技术
    200
  • php路由是什么

    什么是php的路由机制 1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。(推荐学习:PHP视频教程) 举个例子,如:http://main.test.com/article/1;其中:/article/1  ->…

    2025年3月5日
    200
  • php用什么编译器

    php常用编辑器 1、PHPStorm- 最好的PHP IDE (商业版本) PHPStorm 是全功能的PHP IDE,其拥有最现代化的功能集可以快速便捷的进行网页开发。它由名叫JetBrains的公司开发并销售。 在过去的15年中,在开…

    2025年3月5日
    200
  • php应该着重学哪些

    1.解释mvc (1)mvc即 模型model,视图view,控制器controller;是一种模型,是一种编程思想,就是把一个应用的输入、输出、数据处理分开,分解耦合。 (2)A..视图,数据采集和处理,和用户请求,不包括业务流程,sma…

    2025年3月5日
    200
  • php依赖内核吗

    php内核组成模块和运行原理 php总共包括3个模块: 1、php内核 2、zend引擎 立即学习“PHP免费学习笔记(深入)”; 3、php扩展层 内核: 用于处理请求,文件流,错误处理等相关处理。 zend引擎:将源文件转换成机器语言(…

    2025年3月5日
    200

发表回复

登录后才能评论