濮阳杆衣贸易有限公司

主頁 > 知識庫 > PHP中的Iterator迭代對象屬性詳解

PHP中的Iterator迭代對象屬性詳解

熱門標簽:保定crm外呼系統(tǒng)運營商 七魚外呼系統(tǒng)停用嗎 智能電話機器人排名前十名南京 海南人工外呼系統(tǒng)有效果嗎 抖音有個地圖標注是什么意思 阿里云400電話申請加工單 地下城堡2圖九地圖標注 西區(qū)企業(yè)怎么做地圖標注入駐 九江外呼系統(tǒng)

前言

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

class HardDiskDrive {

  public $brand;
  public $color;
  public $cpu;
  public $workState;

  protected $memory;
  protected $hardDisk;

  private $price;

  public function __construct($brand, $color, $cpu, $workState, $memory, $hardDisk, $price) {

    $this->brand = $brand;
    $this->color = $color;
    $this->cpu  = $cpu;
    $this->workState = $workState;
    $this->memory = $memory;
    $this->hardDisk = $hardDisk;
    $this->price = $price;
  }

}

$hardDiskDrive = new HardDiskDrive('希捷', 'silver', 'tencent', 'well', '1T', 'hard', '$456');

foreach ($hardDiskDrive as $property => $value) {

  var_dump($property, $value);
  echo 'br>';
}

輸出結(jié)果為:

string(5) "brand" string(6) "希捷"
string(5) "color" string(6) "silver"
string(3) "cpu" string(7) "tencent"
string(9) "workState" string(4) "well"

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

如果我們想遍歷出對象的所有屬性,就需要控制foreach的行為,就需要給類對象,提供更多的功能,需要繼承自Iterator的接口:

該接口,實現(xiàn)了foreach需要的每個操作。foreach的執(zhí)行流程如下圖:

看圖例中,foreach中有幾個關(guān)鍵步驟:5個。

而Iterator迭代器中所要求的實現(xiàn)的5個方法,就是用來幫助foreach,實現(xiàn)在遍歷對象時的5個關(guān)鍵步驟:

當foreach去遍歷對象時, 如果發(fā)現(xiàn)對象實現(xiàn)了Ierator接口, 則執(zhí)行以上5個步驟時, 不是foreach的默認行為, 而是調(diào)用對象的對應方法即可:

示例代碼:

class Team implements Iterator {

  //private $name = 'itbsl';
  //private $age = 25;
  //private $hobby = 'fishing';

  private $info = ['itbsl', 25, 'fishing'];

  public function rewind()
  {
    reset($this->info); //重置數(shù)組指針
  }

  public function valid()
  {
    //如果為null,表示沒有元素,返回false
    //如果不為null,返回true

    return !is_null(key($this->info));
  }

  public function current()
  {
    return current($this->info);
  }

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

  public function next()
  {
    return next($this->info);
  }

}

$team = new Team();

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

  var_dump($property, $value);
  echo 'br>';
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • PHP之預定義接口詳解
  • PHP中預定義的6種接口介紹
  • PHP聚合式迭代器接口IteratorAggregate用法分析
  • PHP迭代器接口Iterator用法分析
  • PHP設(shè)計模式之迭代器模式Iterator實例分析【對象行為型】
  • PHP設(shè)計模式之迭代器(Iterator)模式入門與應用詳解
  • PHP使用DirectoryIterator顯示下拉文件列表的方法
  • php中通過DirectoryIterator刪除整個目錄的方法
  • PHP預定義接口——Iterator用法示例

標簽:梅河口 昭通 十堰 甘肅 遼陽 涼山 九江 韶關(guān)

巨人網(wǎng)絡通訊聲明:本文標題《PHP中的Iterator迭代對象屬性詳解》,本文關(guān)鍵詞  PHP,中的,Iterator,迭代,對象,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中的Iterator迭代對象屬性詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中的Iterator迭代對象屬性詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    陆河县| 兖州市| 长岭县| 滨海县| 新竹县| 那坡县| 康保县| 六安市| 清新县| 毕节市| 百色市| 安化县| 沅江市| 若羌县| 泸西县| 庆阳市| 郴州市| 张北县| 察隅县| 丁青县| 昌邑市| 龙口市| 东海县| 北海市| 恭城| 雷州市| 莆田市| 黄梅县| 乌拉特中旗| 克什克腾旗| 土默特右旗| 和林格尔县| 象山县| 托克逊县| 泸溪县| 葫芦岛市| 宽甸| 昌黎县| 团风县| 南溪县| 叙永县|