Lặp lại PHP
PHP - Có thể lặp lại là gì?
Một giá trị có thể lặp lại là bất kỳ giá trị nào có thể được lặp lại bằng một foreach()
vòng lặp.
Kiểu iterable
giả đã được giới thiệu trong PHP 7.1 và nó có thể được sử dụng làm kiểu dữ liệu cho các đối số của hàm và giá trị trả về của hàm.
PHP - Sử dụng Iterables
Từ iterable
khóa có thể được sử dụng như một kiểu dữ liệu của một đối số hàm hoặc làm kiểu trả về của một hàm:
Thí dụ
Sử dụng đối số hàm có thể lặp lại:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Thí dụ
Trả lại một tệp có thể lặp lại:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Tạo lặp lại
Mảng
Tất cả các mảng đều có thể lặp lại, vì vậy bất kỳ mảng nào cũng có thể được sử dụng làm đối số của một hàm yêu cầu có thể lặp lại.
Trình lặp lại
Bất kỳ đối tượng nào triển khai Iterator
giao diện đều có thể được sử dụng làm đối số của một hàm yêu cầu có thể lặp lại.
Một trình lặp chứa danh sách các mục và cung cấp các phương thức để lặp qua chúng. Nó giữ một con trỏ đến một trong các phần tử trong danh sách. Mỗi mục trong danh sách phải có một khóa có thể được sử dụng để tìm mục đó.
Một trình lặp phải có các phương thức sau:
current()
- Trả về phần tử mà con trỏ hiện đang trỏ tới. Nó có thể là bất kỳ kiểu dữ liệu nàokey()
Trả về khóa được liên kết với phần tử hiện tại trong danh sách. Nó chỉ có thể là một số nguyên, float, boolean hoặc stringnext()
Di chuyển con trỏ đến phần tử tiếp theo trong danh sáchrewind()
Di chuyển con trỏ đến phần tử đầu tiên trong danh sáchvalid()
Nếu con trỏ bên trong không trỏ đến bất kỳ phần tử nào (ví dụ: nếu next () được gọi ở cuối danh sách), điều này sẽ trả về false. Nó trả về true trong bất kỳ trường hợp nào khác
Thí dụ
Triển khai giao diện Iterator và sử dụng nó như một giao diện có thể lặp lại:
<?php
// Create an Iterator
class MyIterator implements Iterator {
private $items = [];
private $pointer = 0;
public
function __construct($items) {
// array_values() makes
sure that the keys are numbers
$this->items =
array_values($items);
}
public function current() {
return $this->items[$this->pointer];
}
public function
key() {
return $this->pointer;
}
public function next() {
$this->pointer++;
}
public function rewind() {
$this->pointer =
0;
}
public function valid() {
// count() indicates how many items are in the list
return $this->pointer < count($this->items);
}
}
// A
function that uses iterables
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
// Use the iterator as an iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>