PHP基於SPL實作的迭代器模式

不言
發布: 2023-03-24 17:18:01
原創
1366 人瀏覽過

這篇文章主要介紹了PHP基於SPL實現的迭代器模式,簡單描述了迭代器模式的概念、原理並結合實例形式分析了php使用SPL實現迭代器模式的相關操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了PHP基於SPL實現的迭代器模式。分享給大家參考,具體如下:

現在有這麼兩個類,Department部門類別、Employee員工類別:

//部门类
class Department{
  private $_name;
  private $_employees;
  function __construct($name){
    $this->_name = $name;
    $this->employees = array();
  }
  function addEmployee(Employee $e){
    $this->_employees[] = $e;
    echo "员工{$e->getName()}被分配到{$this->_name}中去";
  }
}
//员工类
class Employee{
  private $_name;
  function __construct($name){
    $this->_name = $name;
  }
  function getName(){
    return $this->_name;
  }
}
//应用:
$lsgo = new Department('LSGO实验室');
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
登入後複製



#好了,現在LSGO實驗室已經有兩個部員了,現在我想把全部的部員都列出來,就是用循環來獲取部門的每個員工的詳情。
在這裡我們用PHP中的SPL標準函式庫提供的迭代器來實作。
《大話設計模式》中如是說:迭代器模式:迭代器模式是遍歷集合的成熟模式,迭代器模式的關鍵是將遍歷集合的任務交給一個叫做迭代器的對象,它的工作時遍歷並選擇序列中的對象,而客戶端程式設計師不必知道或關心該集合序列底層的結構。

迭代器模式的作用簡而言之:是讓所有複雜資料結構的元件都可以使用循環來存取

假如我們的物件要實現迭代,我們讓這個類別實作Iterator (SPL標準函式庫提供),這是一個迭代器接口,為了實作該接口,我們必須實作以下方法:

current()

,該函數傳回目前資料項

key(),函數傳回目前資料項目的鍵或該項目在清單中的位置

next()

,該函數使資料項目的鍵或位置前移rewind()

,該函數重置鍵值或位置

valid()

,該函數傳回bool 值,表示當前鍵或位置是否指向資料值

實作了Iterator 介面和規定的方法後,PHP就能夠知道該類別類型的物件需要迭代。

我們使用這種方式重構Department 類別:

附加:

假如現在我們想要知道該部門有幾個員工,如果是數組的話,一個

count()

函數就ok 了,那麼我們能不能像上面那樣把物件當作數組來處理? SPL標準函式庫中提供了Countable 介面供我們使用:

class Department implements Iterator,Countable{
  //前面同上
  //实现Countable中要求实现的方法
  function count(){
    return count($this->_employees);
  }
}
//应用:
echo "员工数量:";
echo count($lsgo);
登入後複製
####本文參考自《深入理解PHP高階技巧、物件導向與核心技術》### ###相關推薦:#########PHP SPL應用淺析#############PHP基於phpqrcode類別產生二維碼的方法詳解######## ########################

以上是PHP基於SPL實作的迭代器模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!