This time I will bring you a detailed explanation of the steps of iterators implemented in PHP based on SPL. What are the iterators implemented in PHP based on SPL?Now there are two categories, Department category and Employee category:
//部门类 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);
Okay, now there are two members in the LSGO laboratory, and now I want to List all employees, that is, use a loop to obtain the details of each employee in the department.
Here we use the iterator provided by the SPL standard library in PHP to implement.
"Big Talk
Design Pattern Iterator pattern: The iterator pattern is a mature pattern for traversing collections. The iterator pattern The key is to hand over the task of traversing the collection to an object called an iterator, which works by traversing and selecting objects in the sequence, without the client programmer having to know or care about the underlying structure of the collection sequence.The function of the iterator pattern in short is to enable all components of complex data structures to be accessed using loops
If our object wants to implement iteration, we make this class implement Iterator (Provided by the SPL standard library), this is an iterator interface. In order to implement this interface, we must implement the following method:
current(), this function returns the current data itemkey()
, this function returns the key of the current data item or the position of the item in the listnext()
, this function moves the key or position of the data item forwardrewind()
, this function resets the key value or positionvalid()
, this function returns a bool value, indicating whether the current key or position points to the data valueAfter implementing the Iterator interface and the specified methods, PHP will be able to know that objects of this type need to be iterated.
We refactor the Department class in this way:
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()}"; }
If now we want to know how many employees there are in this department, If it is an array, a
count()function is ok, so can we treat the object as an array as above? The SPL standard library provides the Countable interface for us to use:
class Department implements Iterator,Countable{ //前面同上 //实现Countable中要求实现的方法 function count(){ return count($this->_employees); } } //应用: echo "员工数量:"; echo count($lsgo);
Copy after login
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website!Recommended reading:
php7 Detailed explanation of the steps to add, delete, modify and query MongoDBDetailed explanation of PHP factory method design pattern caseThe above is the detailed content of Detailed explanation of iterator steps implemented in PHP based on SPL. For more information, please follow other related articles on the PHP Chinese website!
Related labels:
source:php.cn
Previous article:Six ways to sort arrays in PHP
Next article:Detailed explanation of steps to generate promotional posters with PHP
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
-
2018-06-11 11:57:34
-
2018-06-15 15:55:18
-
2018-06-15 15:49:00
-
2018-06-15 15:46:15
-
2018-06-15 15:42:38
-
2018-06-15 15:40:34
-
2018-06-15 15:39:32
-
2018-06-15 15:37:14
-
2018-06-15 15:34:21
-
2018-06-15 15:22:51
Latest Issues
PHP trim unicode spaces
I'm trying to trim unicode spaces such as this character and I was able to do it using thi...
From 2023-11-13 08:49:45
0
2
398
Related Topics
More>
Popular Recommendations
Popular Tutorials
More>
-
-
-
JAVA Beginner's Video Tutorial
2374111
-
-
Latest Downloads
More>
-
-
-
-
-
-
-
-
-
About us
Disclaimer
Sitemap
-
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!