通过引用使用 __get()

2024-06-23

有一个像这样的示例类:

class Test{
    public function &__get($name){
        print_r($name);
    }
}

一个实例Test将像这样反冲输出:

$myTest = new Test;
$myTest->foo['bar']['hello'] = 'world';
//outputs only foo

有没有一种方法可以获取有关正在访问的数组维度的更多信息,向我展示(从前面的示例)bar的元素foo,以及hello的元素bar被针对?


您不能使用当前的实现。为了使其工作,您必须创建一个数组对象(即:一个实现ArrayAccess)。就像是:

class SuperArray implements ArrayAccess {
    protected $_data = array();
    protected $_parents = array();

    public function __construct(array $data, array $parents = array()) {
        $this->_parents = $parents;
        foreach ($data as $key => $value) {
            if (is_array($value)) {
                $value = new SuperArray($value, array_merge($this->_parents, array($key)));
            }
            $this[$key] = $value;
        }
    }

    public function offsetGet($offset) {
        if (!empty($this->_parents)) echo "['".implode("']['", $this->_parents)."']";
        echo "['$offset'] is being accessed\n";
        return $this->_data[$offset];
    } 

    public function offsetSet($offset, $value) {
        if ($offset === '') $this->_data[] = $value;
        else $this->_data[$offset] = $value;
    } 

    public function offsetUnset($offset) {
        unset($this->_data[$offset]);
    } 

    public function offsetExists($offset) {
        return isset($this->_data[$offset]);
    } 
}

class Test{
    protected $foo;

    public function __construct() {
        $array['bar']['hello'] = 'world';
        $this->foo = new SuperArray($array); 
    }

    public function __get($name){
        echo $name.' is being accessed.'.PHP_EOL;
        return $this->$name;
    }
}

$test = new Test;
echo $test->foo['bar']['hello'];

应该输出:

foo is being accessed.
['bar'] is being accessed
['bar']['hello'] is being accessed
world
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过引用使用 __get() 的相关文章

  • 特殊字符和 URL 重写

    我目前正在开发一个应用程序 该应用程序从暴雪社区 API 中提取 JSON 数据并使用 PHP 对其进行解析 一切正常 直到我遇到一个名字中有特殊字符的角色 为了提取角色数据 我需要知道他们的角色名称和他们所在的领域 我将名称和领域通过 U
  • Laravel 5 中的两个登录表单

    我一直想知道如何在 laravel 5 中制作两个登录表单一段时间 原因是因为我有一个多站点项目 我在一个项目中拥有管理站点和公共站点 我对路由进行了分组 以便管理路由回答一个域 公共路由回答另一个域 如下所示 Route group ar
  • PHPUnit:当将类型作为第二个参数作为非字符串传递时,assertInstanceOf() 不起作用

    我需要检查变量是否是User type User是我的班级 user我的对象 this gt assertInstanceOf user User 这是行不通的 我有以下错误 use of undefined constant User a
  • WooCommerce 从所有订单中获取项目元

    我正在尝试显示 WooCommerce 插件中所有已完成订单的所有订单项目 带有项目元 我还想将显示限制为仅显示 10 个订单项目 我已经弄清楚如何显示所有订单项目 但无法将数量限制为 10 这是我当前用于显示所有订单项目的代码 args
  • whereHas 之后的 where 查询在 Laravel 5.4 中无法正常工作

    就我而言 我有channels与多对多关系的表类别 table 我想获取他们的频道类别包含像doing这样的动态值LIKE查询每个类别的标题 但我需要检查 a 的另一列channel通过 where 子句 这是一个channel结构 id
  • PHP“按引用分配”的奇怪现象

    我发现了一个代码片段 其中包括 a b 但没有测试 b 是否确实存在 if isset b 我不确定 PHP 是如何处理这个问题的 所以我进行了一个快速的裸测试 现在我更加感兴趣了 a array a gt b x gt y b array
  • MySQL:删除包含特定参数且早于一天的行[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 mysql 为我的网站创建一个登录系统 它在基于订阅的系统上运行 如果参数 premium 等于 1 DAY 如果它早于一
  • 如果 Woocommerce 单一产品中的库存数量少于 10,请在库存数量旁边添加文本

    我发现这是作为另一个线程的评论发布的 但我不知道应该用它做什么 if product gt get stock quantity lt 10 echo Limited supply left 我想它应该有一个钩子 我试过woocommerc
  • PHP - 可以将成员函数分配给变量吗? [复制]

    这个问题在这里已经有答案了 在 PHP5 中 变量可以作为函数进行计算1 http php net manual en functions variable functions php例如 function myFunc echo what
  • PHP 的 Checkstyle 作为 Eclipse 插件

    有这样的插件可用吗 是的 有一个 PHP 工具集成 http www phpsrc org 与 Checkstyle 等效的是 PHP CodeSniffer 一个 pear 包 您可以在这里找到更多信息PHP CodeSniffer ht
  • 数组和foreach

    posts array message gt this is a test message foreach posts as post echo post message 为什么上面的代码只输出message中的第一个字母 t Thanks
  • 如何在 dompdf 库上启用调试?

    我正在使用 dompdf 库来输出一些报告 我得到了一个文件输出 但我有一些奇怪的行为 如何启用调试报告dompdf https github com dompdf dompdf dompdf new Dompdf something li
  • 如何向用户提供 Ajax POST 响应作为下载?

    我正在尝试在包含帐户信息的现有页面中包含 vCard 导出功能 丑陋的方法包括 1 向同一页面提交表单 处理它并重新渲染整个页面 或者 2 针对页面上的 iframe 进行 GET 我真的很想避免这两种情况 但我可能必须使用 2 来实现目标
  • 使用 Wikipedia API 查找文章的主要类别

    我有一个文章列表 我想找到每篇文章的主要类别 维基百科在这里列出了它的主要类别 http en wikipedia org wiki Portal Contents Categories http en wikipedia org wiki
  • Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录

    How can 拉拉维尔 5的日志记录更改为Monolog Handler BrowserConsoleHandler What doesn t在 Laravel 5 中工作但是does在独立的 PHP 文件中工作 use Illumina
  • 更新 Composer 依赖项时 Artisan 命令出错

    我正在为 Laravel 开发一个库 其中包含一个服务提供者 我已将此库添加到另一个项目的composer json file The composer json 主项目 的文件包含以下脚本 scripts post root packag
  • 尝试加载 php_oci8.dll 时 PHP 启动时出现警告

    我正在使用 XAMPP 并尝试为 sql 配置 Oracle 连接 我取消了该行的注释extension php oci8 dll一开始出现错误 缺少oci dll 但后来我从Oracle网页下载了instantclient 我尝试过版本
  • PHP 会话混乱

    好吧 我已经很困惑了 我有一个存储在会话中的对象 我可以向该对象添加项目 到目前为止非常简单 我像这样初始化对象 template new Template mysqli SESSION template serialize templat
  • PHP 构建/集成工具:您使用它们吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 发帖到 FB 粉丝专页时如何解决“不支持的发帖请求”?

    我有一个可以执行 ff 的脚本 发布指向用户时间线 墙的链接 以管理员身份发布指向用户页面的链接 发布到用户的个人资料页面工作正常 然而 发布到粉丝页面的行为很奇怪 我我能够发帖但我回来了 不支持的发布请求 错误 我已经搜索过这个问题并尝试

随机推荐

  • 使用 HashMap 填充 TableView,该 HashMap 更改时将更新

    我已经关注这个帖子了 将 hashmap 与 tableview 绑定 JavaFX https stackoverflow com questions 18618653 binding hashmap with tableview jav
  • 如何在 Xcode 4.5 中制作 .ipa 文件?

    由于我将 xCode 升级到 4 5 我找不到将我的 iOS 应用程序另存为 ipa 文件的选项 我想通过 Testflight 分发该文件 有什么建议么 这是存档选项的屏幕截图 然后 在组织者的文件夹中构建您的存档Archives选项卡
  • Varnish 的用户友好错误页面

    我们在 Plone 的前面使用 Varnish 如果 Plone 出现故障或出现内部错误 我们希望显示一个用户友好的静态 HTML 页面 其中包含一些 CSS 样式 图像 服务器正在更新页面 如何配置 Varnish 来做到这一点 另一种简
  • 取消忽略 git 中被忽略目录中的文件

    In my gititnore我有一个条目 build 效果很好 整个目录都会被 git 忽略 现在 我只想打破这个规则并保留这个文件 build outputs mapping release mapping txt in git 我怎样
  • 在Scrapy中获取所有Spiders类名称

    在旧版本中 我们可以使用以下代码获取蜘蛛列表 蜘蛛名称 但在当前版本 1 4 中我面临 py warnings WARNING run all spiders py 17 ScrapyDeprecationWarning CrawlerRu
  • MP3 可视化 - PHP

    我正在尝试使用 JavaScript 以及任何相关的插件 框架 jQuery 库 和 html5 为我的网站构建一个 mp3 播放器 所以我构建了播放器 更准确地说 我实现了 jPlayer 现在我想做一个可视化工具 好吧 也许它不是一个可
  • 用于替换文件中的文本块的 PowerShell 命令

    我正在尝试使用 PowerShell 替换文件中的一段文本 例如 我有一个 sql 文件 并且我知道该特定文件中需要替换的 SQL 脚本的确切块 通读一些 PowerShell 替换示例后 PowerShell 似乎以数组形式返回文件内容
  • iOS 应用程序扩展 - 操作 - 自定义数据

    我正在开发一个应用程序扩展Action 主机应用程序将以正常方式使用我的扩展 通过呈现UIActivityViewController包括一个数组activityItems然后将其传递给我的分机 iOS会根据item是否匹配来决定是否呈现我
  • Vuex 存储在 vue-router 中未定义

    我有一个路由器和一个全局beforeEach挂钩来验证身份验证 import store from store store const router new Router routes router beforeEach to from n
  • jsLint 错误“无法设置未定义的属性‘first’”

    对此运行 jsLintfiddle http jsfiddle net jeljeljel SXajC 81 脚本运行 但是当 jsLint 说 第 7 行第 18 行出现问题 无法设置未定义的属性 first 时 它告诉我什么 使用示例代
  • 如何在 C# 中按值而不是引用将数组保存在列表中

    我想保存数组的当前状态 然后更改该数组 但是当我将数组保存在列表中然后更改数组时 列表中的数组也会更改 这是示例代码和我的代码的一部分 void main List
  • 为什么不允许 UTF-8 作为“ANSI”代码页?

    窗户 setmbcp https web archive org web 20100108193149 http msdn microsoft com en us library 883tf19a VS 80 aspx函数允许任何有效的代码
  • iPhone/iPad 可以像 iBooks 一样绘制 pdf 吗?

    有谁知道如何使用核心图形来绘制pdf 就像在iBooks中一样 我已经可以使用核心图形绘制 pdf 页面 但很好奇 iBooks 如何显示每个页面的较低质量视图 以便加载速度更快 然后当您在页面上停留更长时间时 它会呈现完整的质量 这使得它
  • 如何暂停 R 并稍后恢复?

    我有一个非常大的数据集 包含超过 1 亿行 我正在该数据集上运行循环 该代码从两天前开始运行 我忘记添加一个计数器来查看还剩多少时间 我在一个办公桌先到先得的地方工作 所以你不能有一个特定的办公桌 每天结束时 你必须注销系统 我的问题是 如
  • 使用 preg_replace 替换双引号之间的逗号 [重复]

    这个问题在这里已经有答案了 我有一个这样的 csv 文件 Number Name UG College UG University PG College PG University 1100225 Lakshmin pkrrrr Colle
  • 无法从文件中读取简单的二进制整数? (C++)

    我的代码简单如下 UPDATED include
  • 启用 USB 设备进行远程调试在 Firefox 上不起作用

    我使用的firefox版本是106 0 2 我正在尝试连接 oculus quest 2 来调试网站项目 问题是我按下启用 USB 设备按钮 它显示更新状态 然后再次显示相同的按钮 状态保持禁用 有任何想法吗 chrome 的开发工具也不起
  • .NET 中通过字符串键或数字索引查找的最佳数据结构是什么?

    我正在寻找最理想的数据结构 为了性能和易用性 可以通过字符串键或索引检索值 字典不起作用 因为您无法真正通过索引进行检索 有任何想法吗 你想要的有序字典 http msdn microsoft com en us library syste
  • winforms可以使用otf字体吗?

    我尝试过在标签 文本框以及在绘画事件中绘图时使用开放式字体 但这不起作用 有什么方法可以让 Open Type Font 工作吗 这在 Winforms 中是不可能的 GDI 仅支持 TrueType 字体 您必须迁移到 WPF 才能获得
  • 通过引用使用 __get()

    有一个像这样的示例类 class Test public function get name print r name 一个实例Test将像这样反冲输出 myTest new Test myTest gt foo bar hello wor