mysqli_result似乎未实现Iterator接口

时间:2018-08-05 10:42:58

标签: php mysqli iterator

PHP docs指出从5.4版开始:

  添加了

Iterator支持,因为 mysqli_result 现在实现了Traversable

这意味着mysqli_result必须实现了迭代器方法current()key()next()rewind()valid()

但是当我这样做时:

/** @var \mysqli */
$rStmt = $oMySQLi->prepare('<valid query>');
$rStmt->execute();
/** @var \mysqli_result */
$rRes = $rStmt->get_result();
$rRes->rewind();

我得到了错误:

  

调用未定义的方法mysqli_result :: rewind()

?!

1 个答案:

答案 0 :(得分:5)

mysqli_result确实实现了Iterator函数,只是它们没有暴露给用户区(source)。但是,您可以将mysqli_result包装在IteratorIterator中。

$it = new \IteratorIterator($result);
$it->current(); // or rewind(), next()

IteratorIterator直接使用C实现,因此不限于用户区域可访问性限制。