当前位置:首页 > 日记 > 正文

如何能使一个物体像PHP数组foreach循环

如何能使一个物体像PHP数组foreach循环
当我进入这个问题的接触,我没有考虑到迭代器模式,并尝试了总体思路,失败后,我们直接去看每一个源代码,以期找出是否有任何foreach处理对象的特殊性,它可以作为一个突破口。

半天之后,一个奇怪的开关:在核心逻辑中被发现了。
复制代码代码如下所示:
开关(zend_iterator_unwrap(阵列,ITER tsrmls_cc)){
违约:
案例zend_iter_invalid:
的…
打破
案例zend_iter_plain_object:{
......
打破;
案例zend_iter_plain_array:
的…
打破;
案例zend_iter_object:
......
打破;
}

从这个结构,我们可以看到,对象分为zend_iter_object和zend_iter_plain_object。这个是什么意思
复制代码代码如下所示:
zend_api枚举zend_object_iterator_kind zend_iterator_unwrap(
array_ptr zval *,zend_object_iterator ** ITER tsrmls_dc)
{
开关(z_type_p(array_ptr)){
案例is_object:
如果(z_obj_ht_p(array_ptr)= = iterator_object_handlers){
* ITER =(zend_object_iterator *)zend_object_store_get_object(array_ptr tsrmls_cc);
返回zend_iter_object;
}
如果(hash_of(array_ptr)){
返回zend_iter_plain_object;
}
返回zend_iter_invalid;
案例is_array:
如果(hash_of(array_ptr)){
返回zend_iter_plain_array;
}
返回zend_iter_invalid;
违约:
返回zend_iter_invalid;
}
}

内置的迭代器接口,将相关的PHP,php5开始支持的接口,和一个内置的迭代器接口,所以如果你定义一个类,它实现了Iterator接口,那么你在班上是zend_iter_object,或zend_iter_plain_object。

为zend_iter_plain_object类,每个通过hash_of获取对象的默认属性数组,然后每。阵列

foreach为zend_iter_object,迭代器接口类的对象,通过调用迭代器接口相关的函数对象实施执行。
复制代码代码如下所示:
迭代器遍历延伸{
方法
抽象公共混合流(无效)
抽象公共标量密钥(空)
抽象空下一个(空)
抽象公共空白倒带(空白)
抽象公共有效(无效)
}

因此,对笔试问题可以作如下回答:
复制代码代码如下所示:
类示例实现迭代器
{
私人_items美元=阵列(1,2,3,4,5,6,7);
公共功能__construct(){

}
公共函数rewind(){重置(美元-> _items);}
公共功能的电流(){返回电流(美元-> _items);}
公共功能键(){ return键(美元-> _items);}
公共函数(){ return(下一美元-> _items);}
公共函数(有效)返回($)-当前(){ }!= false);
}
新样本();
foreach(SA美元美元美元关键= val){
打印密钥;
}

上述代码在PHP 5.3下正常运行。

相关文章

易观分析:中国打车APP市场烧钱赚用

易观分析:中国打车APP市场烧钱赚用

市场,用户,中国,打车,烧钱,易智智库分析师王健 根据EnfoDesk易观智库产业数据库发布的《中国打车APP市场监测报告第一季度2014数据显示,截至2014年3月31日一季度,中国打车APP客户端累计账户规模达9828万,其中,快的打车,滴滴打车分别以51.6%的比…

对jetcar.exe-jetcar的作用是什么

对jetcar.exe-jetcar的作用是什么

作用,电脑软件,jetcar,exe,点评:jetcar.exe是加速软件网际快车的下载部分 进程文件:jetcar或jetcar.exe 进程名称:amazesoft快车 过程类别:安全风险的过程 英文描述: jetcar.exe是一部分的网际快车下载加速器加速 中文参考: jetcar.exe是网际快…

同步推特第三周年纪念:三年

同步推特第三周年纪念:三年

同步,周年纪念,电脑软件,三年前,我们抛出的只是传播爱的梦想,秋天开花。三年后,我们依然没有停止,我们有了你的时间,我们实现了理想。 有人说,三年是一个微妙的循环,生命的不断变换往往在很长一段时间里重复。 回顾过去,在短暂而重要的三年之后,我…

一幅柚子和婶婶争论的

一幅柚子和婶婶争论的

婶婶,柚子,一幅,电脑软件,俗话说,一山容不下两只老虎,一张姐妹纸不需要两个阿姨的APP,所以美柚和舅妈做的战争是难以避免的。 如果世上只有一个男人能让女人爱恨,那么毫无疑问,一个大姨妈。当她不来的时候,你和你会更痛苦。但是现在,她不仅让你爱…

对于fedora12登录根用户Linux认证

对于fedora12登录根用户Linux认证

认证,用户,登录,方法,电脑软件,点评:Linux认证fedora12根用户登录的方法。如果GUI界面来修改网络配置,似乎修改的程序有错误,然后子网掩码的改变,那么它将变成192.168.1.1。 首先,用用户帐户输入终端,允许root帐户登录。 WQ:保存并退出。 WQ:保存…

AdTime:原广告内容营销的兴起

AdTime:原广告内容营销的兴起

营销,内容,广告,电脑软件,AdTime,多年来,互联网展示类广告最为人诟病的是点击率低,广告效果差强人意,看强制互联网视频广告、互联网搜索和广告的主动性看,这是没有什么竞争力,近年来,逐渐下降,显示广告的市场份额,在增长缓慢的主要因素。下这种情况…

学习更先进、更快、更强的高级指令

学习更先进、更快、更强的高级指令

指令,学习,更快,更强,先进,评论:本文介绍了几种高级知识的内容,供大家参考。 1、第一阶段 a:插入光标。 x:删除光标的字符。 Hjkl:不是光标键 2,第二阶段 o:在当前行中的当前行插入一个新行:插入新行 CW:将光标位置的字符替换为单词的结尾。 0:装…

Win8打开Win8组策略组策略在哪里

Win8打开Win8组策略组策略在哪里

组策略,电脑软件,问题: 对Win8系统组策略;它在哪里如何打开它 答案uff1a Win8打开组策略的方法。首先,按Win + r组合键调出运行框,然后;输入gpedit.msc点确定;;打开组策略窗口。 新手阅读: 新手往往不知道获胜的钥匙在哪里。获胜的钥匙是键盘上…

linux下的ps命令详细解释了Linux下

linux下的ps命令详细解释了Linux下

命令,解释,详细,电脑软件,linux,注释:Linux下的ps命令更常用 Linux下ps命令的详细说明 Linux进程有5个状态: 1。运行(在运行队列中运行或等待) 2。中断(休眠、受阻、等待形成或接收信号的条件) 三.不能中断(接收信号不唤醒和不运行,进程必须等到中…

PHP空()检查变量是否为空。

PHP空()检查变量是否为空。

检查,变量,为空,电脑软件,PHP,空检查变量是否为空。 报告错误描述 清空栈(混合$变量) 如果VaR是非空或非零值,则空()返回false。 空()是反义词(布尔)无功,除了一个警告当一个变量没有设置的情况下。看到转换为布尔值来获取更多的信息。 一个简单…

PHP缓存技术的详细概述

PHP缓存技术的详细概述

缓存,详细,技术,电脑软件,PHP,全页静态缓存 那就是,网页都是由HTML静态页面生成静态页面,用户访问的时候直接用户的访问,而不去解析的PHP服务器的过程。这种方式在CMS系统中更为常见,如dedecms; 最常用的实现之一是使用输出缓存: 复制代码代码如…

萧米金珊将在海淀建设移动互联网产

萧米金珊将在海淀建设移动互联网产

移动互联网,海淀,将在,产业园,电脑软件,2014年3月27日,Xiaomi科技和金山村软件共同宣布,他们将投资于科学和技术在海淀区,北京工业园区的建设,共同构建移动互联网生态系统,小米科技的创始人是一个金山村软件董事长雷军。他说,他之所以落户海淀区…