使对象可以像数组一样进行foreach循环,要求属性必须是私有

1 Iterator extends Traversable {
2 /* Methods */
3 abstract public mixed current ( void )
4 abstract public scalar key ( void )
5 abstract public void next ( void )
6 abstract public void rewind ( void )
7 abstract public boolean valid ( void )
8 }

所以, 对于这道笔试题, 可以作出如下的答案:

 1 class sample implements Iterator
 2 {
 3     private $_items = array(1,2,3,4,5,6,7);
 4     public function __construct() {
 5                   ;//void
 6     }
 7     public function rewind() { reset($this->_items); }
 8     public function current() { return current($this->_items); }
 9     public function key() { return key($this->_items); }
10     public function next() { return next($this->_items); }
11     public function valid() { return ( $this->current() !== false ); }
12 }
13 $sa = new sample();
14 foreach($sa as $key => $val){
15     print $key . "=>" .$val;
16 }

————————————————————————————————————————————

php5里面已经有了iterator接口,只要实现该接口,即可以实现对象私有属性被foreach遍历

 1 <?php
 2 class Sample implements iterator{
 3   private $var = array(1,2,3,4,5);
 4   public function __construct(){}
 5   public function rewind(){ reset($this->var);}
 6   public function current(){return current($this->var);}
 7   public function key(){return key($this->var);}
 8   public function next(){return next($this->var);}
 9   public function valid(){return ($this->current()!==false);}
10 }
11 $s = new Sample();
12 foreach($s as $k=>$v){ echo $k.‘=‘.$v.‘<br/>‘;}
13 ?>
时间: 2024-08-05 21:53:25

使对象可以像数组一样进行foreach循环,要求属性必须是私有的相关文章

嵌套 JSON 对象中的数组使用 for-in 来循环访问每个数组

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p>循环内嵌数组:</p> <p id="demo"></p> <script> var myObj, i, j

for循环,for...in循环,forEach循环的区别

for循环 是应用最广泛的循环形式,适用于已知循环次数,循环嵌套情况 循环逻辑: 1. 定义循环变量并且赋值初始值 2. 判断是否符合进入循环的条件 3. 执行循环体 4. 执行步长 注:1 - 4步为循环执行 基本语法: for...in循环 for-in循环实际是为循环”enumerable“对象而设计的 例: forEach循环 从ES5开始 Javascript内置了forEach方法 用来遍历数组基本语法: 形参1:存储数组单元的数据 形参2:存储数组单元的索引下标 形参3:存储原始数

JavaScript的map循环、forEach循环、filter循环

1.map循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //如果没有return则返回一个全是undefined的数组,个数是索引+1(key+1) }) //返回一个数组 2.forEach循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //进

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CModel实现的接口相关,接下来我们看下其实现的整个过程对于一个我们定义的model,它会继承虚类CActiveRecord,CActiveRecord类继承于CModel,如下所示: class special extends CActiveRecord { } abstract class CAct

es6 Array.from() 将类似数组的对象转化为数组(1)

Array.from() 将数组对象转化为数组,应用方式Array.from(arr) arr数组对象的名称; 常用与类似数组的对象是DOM操作返回的Nodelist集合(如: let ps = document.querySelectorAll('p')),函数内部的arguments对象(如:function(){ let args = Array.from(arguments); //...}) 备注: querySelectorAll('')返回的是一个类似数组的对象,只有将对象转化为数

[Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bits.bitAt(4);//1 bits.bitAt(8);//1 bits.bitAt(9);//0 enable方法被重载了,可以传入一个索引或索引的数组.第二个类的API是字符串集合:无序的字符串集合 var set=new StringSet(); set.add('Hamlet'); se

***PHP 遍历数组的方法foreach

foreach  http://php.net/manual/zh/control-structures.foreach.php (PHP 4, PHP 5) foreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息.有两种语法: foreach (array_expression as $value) statement foreach (array_expression as $key =>

foreach 循环对象的方法

PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种语法,第二种比较次要但却是第一种的有用的扩展. 复制代码代码如下: foreach (array_expression as $value)    statementforeach (array_expression as $key => $value)    statement 第一种格式遍历给定

php中循环实现(字符串,对象,或者数组)编码相互转换

/** * 循环实现编码互转 * * @param string $param(字符串,对象,或者数组),$currCharset当前编码,$toCharset期望编码 * @return 参数类型 */ function zhandi_iconv($param,$currCharset,$toCharset){ if ($currCharset != $toCharset){     if (is_string($param)){        return iconv($currCharse