gpt4 book ai didi

php - 有没有办法在 PHP 中实现 Iterator 的类的对象上进行 foreach?

转载 作者:行者123 更新时间:2023-12-03 22:54:40 25 4
gpt4 key购买 nike

我尝试修改 php.net 中的示例以尝试实现类似 Java/C# 的集合,其中键可能是对象(http://php.net/manual/en/language.oop5.iterations.php,示例 # 2):

<?php
class Test {
private $_n;
public function __construct($n) {
$this->_n = $n;
}
public function getN() {
return $this->_n;
}
}
class MyIterator implements Iterator
{
private $var = array();

// code from php.net ....

public function key()
{
$var = key($this->var);
echo "key: $var\n";

return new Test($var);
}

// code from php.net...

}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach ($it as $a => $b) {
print $a->getN() . ": $b\n";
}

但是我有这样的通知:

Warning: Illegal type returned from MyIterator::key()

我该如何解决?

最佳答案

你正在寻找的东西很容易做到,但是,你需要帮助 foreach 一点:

foreach ($it as $b) {
$a = $it->key();
print $a->getN() . ": $b\n";
}

背景:foreach 只能处理整数或字符串的键(有人说是标量,我更喜欢数组键类比),但不能处理数组或对象。

但是手动获取 key 确实可以毫无问题地工作,有时甚至需要使用作为迭代器但返回数组作为 key 的 PHP 内置类,for example with MultipleIterator .

关于php - 有没有办法在 PHP 中实现 Iterator 的类的对象上进行 foreach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com