欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PHP中Iterator和Generator如何使用

本篇文章給大家分享的是有關(guān)PHP中Iterator和Generator如何使用,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

目前成都創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、彭澤網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

在講解生成器之前先介紹一下迭代器:

在 PHP 中,通常情況下遍歷數(shù)組使用 foreach 來遍歷。

如果我們要想讓一個(gè)對(duì)象可以遍歷呢?

PHP 為我們提供了 Iterator 接口,只要實(shí)現(xiàn)了這個(gè)接口,這個(gè)對(duì)象就可以通過 foreach 來迭代。

例子如下:

class myIterator implements Iterator {
    private $index = 0;
    private $data = '';

    public function __construct($data) {
        $this->index = 0;
        $this->data = $data;
    }

    function rewind() {
        $this->index = 0;
    }

    function current() {
        return $this->data[$this->index];
    }

    function key() {
        return $this->index;
    }

    function next() {
        ++$this->index;
    }

    function valid() {
        return isset($this->data[$this->index]);
    }
}

$it = new myIterator(array(
    "hello",
    "php",
    "iterator",
));
foreach($it as $key => $value) {
    echo "$key : $value<br>";
}

我們通過foreach遍歷 $it 時(shí),PHP 會(huì)自己依次調(diào)用:

rewind()    重置到第一個(gè)元素
valid()     檢查當(dāng)前位置是否有效
current()   返回當(dāng)前元素
key()       返回當(dāng)前元素的鍵    
next()      指向下一個(gè)元素

生成器是 PHP 5.5 引入的新特性,但是目前貌似很少人用到它。

下面試 PHP 官方文檔上對(duì)生成器的解釋:

生成器提供了一種更容易的方法來實(shí)現(xiàn)簡單的對(duì)象迭代,相比較定義類實(shí)現(xiàn) Iterator 接口的方式,性能開銷和復(fù)雜性大大降低。

生成器允許你在 foreach 代碼塊中寫代碼來迭代一組數(shù)據(jù)而不需要在內(nèi)存中創(chuàng)建一個(gè)數(shù)組, 那會(huì)使你的內(nèi)存達(dá)到上限,或者會(huì)占據(jù)可觀的處理時(shí)間。

相反,你可以寫一個(gè)生成器函數(shù),就像一個(gè)普通的自定義函數(shù)一樣, 和普通函數(shù)只返回一次不同的是, 生成器可以根據(jù)需要 yield 多次,以便生成需要迭代的值。

為了體現(xiàn)生成器的有點(diǎn),下面我們定義一個(gè)函數(shù)來進(jìn)行比較:

function func1()
{
    foreach (range(0, 1000000) as $value){
        echo $value;
    }
}

func1();
// ( ! ) Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 402653192 bytes) in xxx.php on line 5

因?yàn)閯?chuàng)建如此大的數(shù)組到內(nèi)存中進(jìn)行迭代,則 PHP 直接提示超出了單個(gè)進(jìn)程的內(nèi)存限制。

下面我們換做生成器的方式來處理:

function func1()
{
    foreach (range(0, 1000000) as $value){
        yield $value;
    }
}

var_dump(func1()); // object(Generator)[1]
foreach (func1() as $value){
    echo $value;
}

可以看到我們調(diào)用 func1() 返回了一個(gè) Generator 對(duì)象,這個(gè)對(duì)象可以使用 foreach 迭代,每次迭代,PHP 會(huì)要求 Generator 實(shí)例計(jì)算并提供下一個(gè)要迭代的值。

生成器的優(yōu)雅體現(xiàn)在每次產(chǎn)出一個(gè)值之后,生成器的內(nèi)部狀態(tài)都會(huì)停頓;

向生成器請(qǐng)求下一個(gè)值時(shí),內(nèi)部狀態(tài)又會(huì)恢復(fù)。生成器內(nèi)部的狀態(tài)會(huì)一直在停頓和恢復(fù)之間切換,直到抵達(dá)函數(shù)定義體的末尾或遇到空的return語句為止。

以上就是PHP中Iterator和Generator如何使用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁名稱:PHP中Iterator和Generator如何使用
文章網(wǎng)址:http://aaarwkj.com/article32/ijhcpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
午夜福利激情视频在线| 欧美国产日韩二区一区在线| 日韩欧美一区二区狠狠插| 国产精品一区二区婷婷| 未满十八禁止在线观看av| 日韩不卡一区二区在线观看| 亚洲欧美日韩精品成人| 日本最新一区二区三区视频| 日本免费一区二区三区等视频| 最新国产av网址大全| 激情一区二区三区视频| 人妻丝袜中文字幕在线| 国语对白自拍视频在线播放| 亚洲一区二区三区伊人| 午夜麻豆影网在线观看| 亚洲午夜一区二区三区精品影院| 日韩av在线观看大全| 午夜视频在线观看免费版| 日韩亚洲一区二区免费| 欧美日韩一区二区综合性色| 日操夜操天天操夜夜操| 色婷婷av一二三区竹菊| 亚洲欧洲成熟熟女妇专区乱| 国产性做爰片免费网站| 国产大学生吞精在线视频| 亚洲美女av一区二区三区| 国产三级无遮挡在线观看| 激情婷婷亚洲五月综合网| 亚洲精品日韩国产av| 极品少妇一级人妻av| 精品亚洲欧美日韩国产| 日韩 在线一区二区| 两性色午夜视频在线观看| 国产精品国产不卡在线| 国产日韩精品国产二区| 成人精品淫片一级免费| 国产亚洲精品一区二区三在线观看| 国产99热这里只有精品| 免费看男人添女人无遮挡| 淫色网av人妻中文字幕| 91成年精品一区在线观看|