>백엔드 개발 >PHP 튜토리얼 >SPL을 기반으로 PHP로 구현된 반복자 패턴

SPL을 기반으로 PHP로 구현된 반복자 패턴

不言
不言원래의
2018-04-23 11:49:201407검색

이 글에서는 주로 SPL을 기반으로 PHP에서 구현하는 반복자 모드를 소개합니다. 반복자 모드의 개념과 원리를 간략하게 설명하고, SPL을 사용하여 PHP에서 반복자 모드를 구현하기 위한 관련 조작 기술과 주의사항을 예제 형식으로 분석합니다. 도움이 필요한 친구들은 다음을 참고하시면 됩니다.

본 글의 예시는 SPL 기반의 PHP로 구현한 반복자 모드를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

이제 부서 카테고리와 직원 카테고리라는 두 가지 카테고리가 있습니다.

//部门类
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 표준 라이브러리에서 제공하는 반복자를 사용하여 구현합니다.

"Dahua 디자인 패턴"에서는 다음과 같이 말합니다.

반복자 패턴: 반복자 패턴은 컬렉션 순회를 위한 성숙한 패턴입니다. 반복자 패턴의 핵심은 컬렉션 순회 작업을 반복자라는 개체에 넘겨주는 것입니다. 작업 순서에 따라 개체를 탐색하고 선택할 때 클라이언트 프로그래머는 컬렉션 순서의 기본 구조를 알거나 신경 쓸 필요가 없습니다.

간단히 반복자 패턴의 기능은 루프를 사용하여 복잡한 데이터 구조의 모든 구성 요소에 액세스할 수 있도록 하는 것입니다.

객체가 반복을 구현하려는 경우 이 클래스가 Iterator(SPL 표준 라이브러리에서 제공)를 구현하도록 만듭니다. 이 인터페이스를 구현하려면 다음 메서드를 구현해야 합니다.

current(), 이 함수는 현재 데이터 항목을 반환합니다
key(), 이 함수는 현재 데이터 항목의 키 또는 목록의 항목 위치를 반환합니다.<br><code>next(), 이 함수는 데이터 항목의 키 또는 위치를 앞으로 이동합니다.
rewind(), 이 함수는 키 값이나 위치를 재설정합니다.
valid(), 이 함수는 현재 키가 현재 키인지 여부를 나타내는 부울 값을 반환합니다. 또는 데이터 값에 대한 위치 포인트current(),该函数返回当前数据项
key(),该函数返回当前数据项的键或者该项在列表中的位置
next(),该函数使数据项的键或者位置前移
rewind(),该函数重置键值或者位置
valid(),该函数返回 bool 值,表明当前键或者位置是否指向数据值

实现了 Iterator 接口和规定的方法后,PHP就能够知道该类类型的对象需要迭代。

我们使用这种方式重构 Department 类:

class Department implements Iterator
{
  private $_name;
  private $_employees;
  private $_position;//标志当前数组指针位置
  function __construct($name)
  {
    $this->_name = $name;
    $this->employees = array();
    $this->_position = 0;
  }
  function addEmployee(Employee $e)
  {
    $this->_employees[] = $e;
    echo "员工{$e->getName()}被分配到{$this->_name}中去";
  }
  //实现 Iterator 接口要求实现的方法
  function current()
  {
    return $this->_employees[$this->_position];
  }
  function key()
  {
    return $this->_position;
  }
  function next()
  {
    $this->_position++;
  }
  function rewind()
  {
    $this->_position = 0;
  }
  function valid()
  {
    return isset($this->_employees[$this->_position]);
  }
}
//Employee 类同前
//应用:
$lsgo = new Department(&#39;LSGO实验室&#39;);
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
echo "LSGO实验室部员情况:";
//这里其实遍历的$_employee
foreach($lsgo as $val){
  echo "部员{$val->getName()}";
}

附加:

假如现在我们想要知道该部门有几个员工,如果是数组的话,一个 count()

구현됨 Iterator 인터페이스와 지정된 메소드를 사용하여 PHP는 이 클래스 유형의 객체를 반복해야 한다는 것을 알 수 있습니다.

Department 클래스를 다음과 같이 리팩토링합니다.

class Department implements Iterator,Countable{
  //前面同上
  //实现Countable中要求实现的方法
  function count(){
    return count($this->_employees);
  }
}
//应用:
echo "员工数量:";
echo count($lsgo);

추가:

이제 해당 부서의 직원 수를 알고 싶다면, 배열인 경우 count() 함수는 괜찮으니 위와 같이 객체를 배열로 처리해도 될까요? Countable 인터페이스는 우리가 사용할 수 있도록 SPL 표준 라이브러리에 제공됩니다.

rrreee

이 문서에서는 "PHP 고급 기술, 객체 지향 및 핵심 기술에 대한 심층적인 이해"

관련 권장 사항:

PHP SPL 애플리케이션에 대한 간략한 분석

🎜PHP가 phpqrcode 클래스를 기반으로 QR 코드를 생성하는 방법에 대한 자세한 설명🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 SPL을 기반으로 PHP로 구현된 반복자 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.