日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php 迭代器

發(fā)布時間:2023/12/9 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 迭代器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?迭代器(Iterator)模式,又叫做游標(biāo)(Cursor)模式。GOF給出的定義為:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內(nèi)部細節(jié)。

百度百科:?http://baike.baidu.com/view/9791023.htm?fr=aladdin

解釋

上面這名話可能多數(shù)人看得似懂非懂,什么叫做訪問容器的各個元素,又不暴露對象的內(nèi)部細節(jié)呢?尤其是網(wǎng)上很多例子都過于簡單,直接扔一個數(shù)組,然后去實現(xiàn)了迭代器的各種方法,如下:

?<?php

class SomeCollection implements Iterator

{

protected $_data;

protected $_pos;

?

function __construct($data)

{

$this->_data = $data;

$this->_pos = 0;

}

?

function current()

{

$row = $this->_data[$this->_pos];

return $row;

}

?

function next()

{

$this->_pos++;

}

?

function valid()

{

return $this->_pos >= 0 && $this->_pos <count($this->_data);

}

?

function key()

{

return $this->_pos;

}

?

function rewind()

{

$this->_pos = 0;

}

}

?

$array = array(

array('url' => 'www.zeroplace.cn'),

array('url' => 'www.baidu.com'),

array('url' => 'www.sina.com.cn'),

array('url' => 'www.google.com'),

array('url' => 'www.qq.com'),

);

?

$coll = new SomeCollection($array);

?

foreach ($coll as $row) {

echo $row['url'], "\n";

}

這樣的例子就不能夠說明迭代器的作用,因為它不能說明迭代器隱藏了內(nèi)部的數(shù)據(jù)結(jié)構(gòu),傳進去的和返回出來的完全是一樣的數(shù)據(jù)。

迭代器怎么用

我只能說在不同的場合有不同的用法。比如我把上面的例子修改一下,可能就可以說明迭代器可以隱藏數(shù)據(jù)結(jié)構(gòu)這個特性了。請看如下代碼。

?<?php

class SomeCollection implements Iterator

{

protected $_data;

protected $_pos;

?

function __construct($data)

{

$this->_data = $data;

$this->_pos = 0;

}

?

function current()

{

$row = $this->_data[$this->_pos];

$row['ip'] = gethostbyname($row['url']);

return $row;

}

?

function next()

{

$this->_pos++;

}

?

function valid()

{

return $this->_pos >= 0 && $this->_pos <count($this->_data);

}

?

function key()

{

return $this->_pos;

}

?

function rewind()

{

$this->_pos = 0;

}

}

?

$array = array(

array('url' => 'www.zeroplace.cn'),

array('url' => 'www.baidu.com'),

array('url' => 'www.sina.com.cn'),

array('url' => 'www.google.com'),

array('url' => 'www.qq.com'),

);

?

$coll = new SomeCollection($array);

?

foreach ($coll as $row) {

echo $row['url'], ' ', ?$row['ip'], "\n";

}

這樣我覺得就可以說明迭代器能隱藏數(shù)據(jù)結(jié)構(gòu)這個特性了。我們的數(shù)據(jù)傳進去的時候每行數(shù)據(jù)只有一個url屬性,但是迭代出來的時候多了一個ip屬性。這樣對外部的使用者來說就是有兩個屬性(url和ip), 它不需要知道這個ip字段是創(chuàng)建者傳入的還是在迭代器中產(chǎn)生的。

更一般的做法

這里current方法返回的是一個關(guān)聯(lián)數(shù)組,更常規(guī)的做法是返回一個對象,此時這個迭代器可能還需要一個對象創(chuàng)建器。

轉(zhuǎn)載于:https://www.cnblogs.com/agang-php/p/5909983.html

總結(jié)

以上是生活随笔為你收集整理的php 迭代器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。