PHP基礎(chǔ)之類和對象14——遍歷對象
PHP 5 提供了一種定義對象的方法使其可以通過單元列表來遍歷,例如用?foreach?語句。默認(rèn)情況下,所有可見屬性都將被用于遍歷。
Example #1 簡單的對象遍歷
class MyClass{ public $var1 = 1; public $var2 = 2; public $var3 = 3; protected $protected = ’protected var’; private $private = ’private var’; function iterateVisible(){echo 'MyClass::iterateVisible:<br>';foreach($this as $key => $value){ print '$key=>$value<br>';} }}?$class = new MyClass();foreach($class as $key => $value){ print '$key => $value<br>';}echo '<br>';$class->iterateVisible();
輸出結(jié)果:
var1 => 1
var2 => 2
var3 => 3
MyClass::iterateVisible:
var1=>1
var2=>2
var3=>3
protected=>protected var
private=>private var
如上所示,foreach?遍歷了所有其能夠訪問的可見屬性。
更進(jìn)一步,可以實(shí)現(xiàn)?Iterator接口。可以讓對象自行決定如何遍歷以及每次遍歷時(shí)那些值可用。
class MyIterator implements Iterator{ private $var = array(); public function __construct($array) {if(is_array($array)){ $this->var = $array;} } public function rewind(){echo 'rewinding<br>';reset($this->var); } public function current(){$var = current($this->var);echo 'current:$var<br>';return $var; } public function key(){$var = key($this->var);echo 'key:$var<br>';return $var; } public function next(){$var = next($this->var);echo 'next:$var<br>';return $var; } public function valid(){$var = $this->current()!==false;echo 'valid:$var<br>';return $var; }}$values = array(1,2,3);$it = new MyIterator($values);foreach($it as $a => $b){ print '$a:$b<br>';}
輸出結(jié)果:
rewinding
current:1
valid:1
current:1
key:0
0:1
next:2
current:2
valid:1
current:2
key:1
1:2
next:3
current:3
valid:1
current:3
key:2
2:3
next:
current:
valid:
可以用?IteratorAggregate接口以替代實(shí)現(xiàn)所有的?Iterator?方法。IteratorAggregate?只需要實(shí)現(xiàn)一個(gè)方法?IteratorAggregate::getIterator(),其應(yīng)返回一個(gè)實(shí)現(xiàn)了?Iterator?的類的實(shí)例。
Example #3 通過實(shí)現(xiàn) IteratorAggregate 來遍歷對象
include_once(’class2.php’);class MyCollection implements IteratorAggregate{ private $items = array(); private $count = 0; public function getIterator(){ return new MyIterator($this->items); } public function add($value){$this->items[$this->count++] = $value; }}$coll = new MyCollection();$coll -> add(’1’);$coll -> add(’2’);$coll -> add(’3’);foreach($coll as $k => $v){ echo 'key/value:[$k->$v]<br><br>';}
輸出結(jié)果:
rewinding
current:1
valid:1
current:1
key:0
key/value:[0->1]
next:2
current:2
valid:1
current:2
key:1
key/value:[1->2]
next:3
current:3
valid:1
current:3
key:2
key/value:[2->3]
next:
current:
valid:
相關(guān)文章:
1. JavaScript實(shí)現(xiàn)簡單的彈窗效果2. Vue 實(shí)現(xiàn)對quill-editor組件中的工具欄添加title3. javascript實(shí)現(xiàn)貪吃蛇小練習(xí)4. 我所理解的JavaScript中的this指向5. Java commons-httpclient如果實(shí)現(xiàn)get及post請求6. js實(shí)現(xiàn)碰撞檢測7. PHP驗(yàn)證碼工具-Securimage8. PHP單件模式和命令鏈模式的基礎(chǔ)知識9. 一文帶你徹底理解Java序列化和反序列化10. PHP利用curl發(fā)送HTTP請求的實(shí)例代碼

網(wǎng)公網(wǎng)安備