이번에는 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 PatternsIterator 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를 추가, 삭제, 수정, 쿼리하는 단계에 대한 자세한 설명
위 내용은 SPL 기반 PHP에서 구현된 반복자 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!