Tôi có một đối tượng triển khai Iterator
và chứa 2 mảng: "mục nhập" và "trang". Bất cứ khi nào tôi lặp qua đối tượng này, tôi muốn sửa đổi mảng mục nhưng tôi nhận được lỗi An iterator cannot be used with foreach by reference
mà tôi thấy bắt đầu trong PHP 5.2.PHP Trình lặp không thể được sử dụng với foreach bằng cách tham chiếu
Câu hỏi của tôi là, làm cách nào để sử dụng lớp Iterator
để thay đổi giá trị của đối tượng được lặp trong khi sử dụng foreach
trên đó?
Mã của tôi:
//$flavors = instance of this class:
class PaginatedResultSet implements \Iterator {
private $position = 0;
public $entries = array();
public $pages = array();
//...Iterator methods...
}
//looping
//throws error here
foreach ($flavors as &$flavor) {
$flavor = $flavor->stdClassForApi();
}
Lý do cho điều này là đôi khi $flavors
sẽ không là một một thể hiện của lớp học của tôi và thay vào đó sẽ chỉ là một mảng đơn giản. Tôi muốn có thể sửa đổi mảng này một cách dễ dàng bất kể loại đó là gì.
tại sao không chỉ kiểm tra xem đó là một o lớp r một mảng đầu tiên và sau đó xử lý nó một cách thích hợp? – MuppetGrinder
@MuppetGrinder Bởi vì tôi sử dụng những phương pháp này ở nhiều nơi và tôi không muốn phải kiểm tra mỗi lần, thay vì chỉ ở 1 nơi. – shiznatix