PHP Iterator迭代物件屬性

2022-01-24 03:30:47 字數 1585 閱讀 8343

foreach用法和之前的陣列遍歷是一樣的,只不過這裡遍歷的key是屬性名,value是屬性值。在類外部遍歷時,只能遍歷到public屬性的,因為其它的都是受保護的,類外部不可見。

class harddiskdrive 

}$harddiskdrive = new harddiskdrive('希捷', 'silver', 'tencent', 'well', '1t', 'hard', '$456');

foreach ($harddiskdrive as $property => $value)

輸出結果為:

string(5) "brand" string(6) "希捷" 

string(5) "color" string(6) "silver"

string(3) "cpu" string(7) "tencent"

string(9) "workstate" string(4) "well"

通過輸出結果我們也可以看得出來常規遍歷是無法訪問受保護的屬性的。

如果我們想遍歷出物件的所有屬性,就需要控制foreach的行為,就需要給類物件,提供更多的功能,需要繼承自iterator的介面:

為什麼乙個類只要實現了iterator迭代器,其物件就可以被用作foreach的物件呢?其實原因很簡單,在對php例項物件使用foreach語法時,會檢查這個例項有沒有實現iterator介面,如果實現了,就會通過內建方法或使用實現類中的方法模擬foreach語句。

該介面,實現了foreach需要的每個操作。foreach的執行流程如下圖:

看圖例中,foreach中有幾個關鍵步驟:5個。

而iterator迭代器中所要求的實現的5個方法,就是用來幫助foreach,實現在遍歷物件時的5個關鍵步驟:

當foreach去遍歷物件時, 如果發現物件實現了ierator介面, 則執行以上5個步驟時, 不是foreach的預設行為, 而是呼叫物件的對應方法即可:

示例**:

class team implements iterator 

public function valid()

public function current()

public function key()

public function next()

}$team = new team();

foreach ($team as $property => $value)

輸出結果為:

string(4) "name" string(5) "itbsl" 

string(3) "age" int(25)

string(5) "hobby" string(7) "fishing"

可迭代物件 迭代物件

2.可迭代物件 迭代器物件 滿足可迭代物件前提 可以被迴圈的物件就是可迭代物件 例如 str list tuple set dict range generator 可以使用比較高效的方式判斷某個物件是否是可迭代物件 需要匯入collections模組中的iterable屬性,並且需要配合內建函式i...

迭代器 可迭代物件 迭代器物件

今天的學習內容有 迭代器 可迭代物件 迭代器物件 for迴圈內部原理 生成器和生成器表示式 面向過程程式設計 迭代就是指更新換代的過程,要重複進行,而且每次的迭代都必須基於上一次的結果。我們使用for迴圈的時候就是把元素從容器裡乙個個取出來,這種過程其實就是迭代。迭代器 迭代取值的工具。迭代器的作用...

物件 可迭代物件 迭代器

本節是對可迭代物件和迭代器的簡單總結,希望對大家有幫助。對於乙個初級選手而言,了解即可,不過這對大家以後高階可能會有一定的幫助。悅分享,越快樂。我們一起成長。哈啊哈哈。物件,乙個實實在在存在的值 可迭代 更新迭代,迴圈的乙個過程,每乙個內容都是新的 可迭代物件 可以進行迴圈更新的乙個實實在在的值。專...