php中的类与对象(遍历)
来源:互联网 发布:i wrote python 编辑:程序博客网 时间:2024/05/25 18:12
默认的遍历
对象可以直接使用foreach进行遍历,默认情况下,将遍历全部可见属性。
class MyClass{ private $var1 = [1,2,3]; public $var2 = [4,5,6]; public function iter() { foreach ($this as $key => $val) { echo "key: $key => val:\n"; var_dump($val); } }}$a = new MyClass;$a->iter();echo "**************\n";foreach($a as $key => $val) { echo "key: $key => val:\n"; var_dump($val);}/*key: var1 => val:array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}key: var2 => val:array(3) { [0]=> int(4) [1]=> int(5) [2]=> int(6)}**************key: var2 => val:array(3) { [0]=> int(4) [1]=> int(5) [2]=> int(6)}*/
Iterator接口
如果类继承了此接口,则可以通过实现该接口中的方法来控制遍历过程,这些方法包括:
abstract public mixed Iterator::current ( void )
- 返回当前元素
abstract public scalar Iterator::key ( void )
- 返回当前元素的键(失败时返回null)
abstract public void Iterator::next ( void )
- 向前移动到下一个元素
abstract public void Iterator::rewind ( void )
- 返回到第一个元素,在foreach开始前被自动调用
abstract public boolean Iterator::valid ( void )
- 此方法在 Iterator::rewind() 和 Iterator::next() 方法之后被调用以此用来检查当前位置是否有效。
class MyClass implements Iterator{ private $var1 = [1, 2, 3]; private $var2 = [4, 5, 6]; private $site = 0; private function getDat($site) { if ($site < count($this->var1)) { return $this->var1[$site]; } else { return $this->var2[$site - count($this->var1)]; } } // foreach前被调用 public function rewind() { $this->site = 0; } // 返回当前项的值 public function current() { return $this->getDat($this->site); } // 返回当前项的键 public function key() { return $this->site; } // 移到下一项 public function next() { $this->site++; } // 判断遍历是否已结束 public function valid() { if($this->site < count($this->var1) + count($this->var2)) return true; return false; }}$a = new MyClass;foreach ($a as $key => $val) { echo "key: $key => val: $val\n";}/*key: 0 => val: 1key: 1 => val: 2key: 2 => val: 3key: 3 => val: 4key: 4 => val: 5key: 5 => val: 6*/
IteratorAggregate接口
类实现此接口后也可以实现对遍历的控制,该接口只有一个方法:
abstract public Traversable IteratorAggregate::getIterator ( void )
虽然方法简单,但此方法的返回值却要求是一个实现了 Iterator 或 Traversable 接口的类的一个实例。 下例仍然会使用到Iterator接口,但可以定义一个相对通用一点的类。
class MyIterator implements Iterator{ private $arr; private $site = 0; public function __construct($arr) { $this->arr = $arr; } // foreach前被调用 public function rewind() { $this->site = 0; } // 返回当前项的值 public function current() { return $this->arr[$this->site]; } // 返回当前项的键 public function key() { return $this->site; } // 移到下一项 public function next() { $this->site++; } // 判断遍历是否已结束 public function valid() { if($this->site < count($this->arr)) return true; return false; }}class MyClass implements IteratorAggregate{ private $var1 = [1,2,3]; private $var2 = [4,5,6]; public function getIterator() { return new MyIterator(array_merge($this->var1, $this->var2)); }}$a = new MyClass;foreach ($a as $key => $val) { echo "key: $key => val: $val\n";}/*key: 0 => val: 1key: 1 => val: 2key: 2 => val: 3key: 3 => val: 4key: 4 => val: 5key: 5 => val: 6*/
阅读全文
0 0
- php中的类与对象(遍历)
- php中的类与对象(对象比较)
- PHP中的类与面向对象
- php中的类与对象(入门)
- php中的类与对象(继承)
- php中的类与对象(抽象、接口与特性)
- php中的类、对象
- 【PHP】对象遍历
- php对象遍历
- php对象的遍历
- 75. PHP 遍历对象
- PHP之对象遍历
- PHP 遍历对象
- [php]对象遍历
- Php内核中的类与对象相关用法详解
- php中的类与对象(魔术方法、克隆和重载)
- PHP 类与对象
- PHP 类与对象
- 深入理解Mysql数据库主从延迟
- UE4 GC
- Jacoco Code Coverage
- SpringBoot可执行包结构
- eclipse中git从远程clone项目报错:cannot open git-upload-pack
- php中的类与对象(遍历)
- 面试宝典---java程序设计的基本概念
- layui注意事项
- 作业2用两个线程玩猜数字游戏
- Codeforces Round #450 (Div. 2) 题解
- 怎么在Android Studio 中编译的APK兼容x86的CPU架构
- [Rcode]线性回归
- 如何理解softmax(柔性最大),为什么不用别的归一化的函数?
- js毫秒数自定义时间格式转换