看看PHP迭代器的內部執行過程

2021-07-02 04:14:35 字數 2062 閱讀 4701

下面我們來了解如何實現乙個自定義的迭代器,然後再開始慢慢理解迭代器的內部工作原理。先來看乙個官方的例子:

class myiterator implements iterator 

function rewind()

function current()

function key()

function next()

function valid()

}$it = new myiterator;

foreach($it as $key => $value)

程式執行輸出:

string(18) "myiterator::rewind"

string(17) "myiterator::valid"

string(19) "myiterator::current"

string(15) "myiterator::key"

輸出鍵值:int(0)

string(13) "first_element"

string(16) "myiterator::next"

string(17) "myiterator::valid"

string(19) "myiterator::current"

string(15) "myiterator::key"

輸出鍵值:int(1)

string(14) "second_element"

string(16) "myiterator::next"

string(17) "myiterator::valid"

string(19) "myiterator::current"

string(15) "myiterator::key"

輸出鍵值:int(2)

string(12) "last_element"

string(16) "myiterator::next"

string(17) "myiterator::valid"

一般的迭代器內部需要下面的方法:

如果不是很清楚迭代器的內容工作流程,可以檢視下面的迭代器對陣列的遍歷過程:

/**

* @author 簡明現代魔法

*/class myiterator implements iterator

}public function rewind()

public function current()

public function key()

public function next()

public function valid() \n";

return $var;

}}$values = array(1,2,3);

$it = new myiterator($values);

foreach ($it as $k => $v)

程式執行結果:

倒回第乙個元素

當前元素: 1

檢查有效性: 1

當前元素: 1

當前元素的鍵: 0

此時鍵值對 -- key 0: value 1

移向下乙個元素: 2

當前元素: 2

檢查有效性: 1

當前元素: 2

當前元素的鍵: 1

此時鍵值對 -- key 1: value 2

移向下乙個元素: 3

當前元素: 3

檢查有效性: 1

當前元素: 3

當前元素的鍵: 2

此時鍵值對 -- key 2: value 3

移向下乙個元素:

當前元素:

檢查有效性:

現在就很清晰了吧?

延伸閱讀

看看php迭代器的內部執行過程

用php迭代器來實現乙個斐波納契數列

php spl,被遺落的寶石

php資料結構預熱:php的迭代器

php predefined inte***ces 預定義介面

PHP迭代器的內部執行過程詳解

複製 如下 class myiterator implements iterator function rewind function current function key function next function valid it new myiterator foreach it as ...

php的執行過程

1.我們從未手動開啟過php的相關程序,它是隨著apache的啟動而執行的 2.php通過mod php5.so模組和apache相連 具體說來是sapi,即伺服器應用程式程式設計介面 3.php總共有三個模組 核心 zend引擎 以及擴充套件層 4.php核心用來處理請求 檔案流 錯誤處理等相關操...

php的執行過程

比如我們有乙個php檔案test.php如下 執行php test.php實際是什麼樣的呢?主要過程如下 1 呼叫zend compile file 這其實是個函式指標,預設實現是compile file 這個函式其實就是呼叫lex根據zend language scanner.l裡的定義進行詞法分...