>백엔드 개발 >PHP 튜토리얼 >SPL 기반 PHP에서 구현된 반복자 단계에 대한 자세한 설명

SPL 기반 PHP에서 구현된 반복자 단계에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-16 15:04:161404검색

이번에는 SPL 기반으로 PHP에서 구현된 Iterator의 단계에 대해 자세히 설명하겠습니다. SPL 기반으로 PHP에서 구현된 Iterator의 주의사항은 무엇입니까? 다음은 실제 사례입니다. 이제 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 표준 라이브러리에서 제공하는 반복자를 사용하여 구현합니다.

"Big Talk

Design Patterns

"에서는 다음과 같이 말합니다.

Iterator Pattern

: 반복자 패턴은 컬렉션 순회를 위한 성숙한 패턴입니다. 반복자 패턴의 핵심은 컬렉션 순회 작업을 다른 개체에 넘겨주는 것입니다. 반복자라고 불리는 객체는 클라이언트 프로그래머가 컬렉션 시퀀스의 기본 구조를 알거나 신경 쓸 필요 없이 시퀀스의 객체를 탐색하고 선택하여 작동합니다. 간단히 반복자 패턴의 기능은 루프를 사용하여 복잡한 데이터 구조의 모든 구성 요소에 액세스할 수 있도록 하는 것입니다.

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

current(), 이 함수는 현재 데이터 항목

key()을 반환합니다. , 이 함수는 현재 데이터 항목의 키 또는 목록

next()에서 항목의 위치를 ​​반환합니다. 이 함수는 데이터 항목의 키 또는 위치를 앞으로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('LSGO实验室');
$e1 = new Employee("小锦");
$e2 = new Employee("小猪");
$lsgo->addEmployee($e1);
$lsgo->addEmployee($e2);
echo "LSGO实验室部员情况:";
//这里其实遍历的$_employee
foreach($lsgo as $val){
  echo "部员{$val->getName()}";
}

附加:

假如现在我们想要知道该部门有几个员工,如果是数组的话,一个 count()rewind( ) 함수는 키 값 또는 위치

valid()를 재설정하며, 구현 후 현재 키 또는 위치가 데이터 값을 가리키는지 여부를 나타내는 부울 값을 반환합니다. Iterator 인터페이스와 지정된 메소드를 통해 PHP는 이 유형의 객체에 반복이 필요하다는 것을 알 수 있습니다.

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

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

추가:

이제 부서의 직원 수를 알고 싶다면 배열인 경우 count( ) 함수는 괜찮으니 위와 같이 객체를 배열로 처리해도 될까요? SPL 표준 라이브러리는 우리가 사용할 수 있는 Countable 인터페이스를 제공합니다. rrreee
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요.

추천 도서:
php7에서 MongoDB를 추가, 삭제, 수정, 쿼리하는 단계에 대한 자세한 설명

🎜🎜🎜🎜PHP 팩토리 메소드 설계 패턴 사례에 대한 자세한 설명 🎜🎜🎜

위 내용은 SPL 기반 PHP에서 구현된 반복자 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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