php - 为什么 iterator_apply 示例中需要第三个参数
问题描述
来自http://php.net/manual/en/function.iterator-apply.php
我无法从文档中理解为什么在下面的示例中需要第三个参数,即 array($it)。
function print_caps(Iterator $iterator) {
echo strtoupper($iterator->current()) . "\n";
return TRUE;
}
$it = new ArrayIterator(array("Apples", "Bananas", "Cherries"));
iterator_apply($it, "print_caps", array($it));
?>
解决方案
如果您查看第二个参数(回调)的文档,手册说:
此函数仅接收给定的参数,因此默认为空。
这是一种相当尴尬的说法,默认情况下(即如果没有第三个参数),回调将不带参数调用。
换句话说,这:
iterator_apply($some_iterator, $some_callback);
大致相当于这个:
foreach ( $some_iterator as $value ) {
$some_callback();
}
由于回调没有传递任何参数,所以它看不到迭代器或当前值。
相反,如果您传递第三个值,则每次都会使用这些参数调用该函数,因此:
iterator_apply($some_iterator, $some_callback, [1,2,3]);
大致相当于这个:
foreach ( $some_iterator as $value ) {
$some_callback(1,2,3);
}
因此,您正在查看的示例允许回调在每次调用时看到迭代器,方法是将其作为参数传递给回调;那是:
iterator_apply($some_iterator, $some_callback, [$some_iterator]);
大致相当于这个:
foreach ( $some_iterator as $value ) {
$some_callback($some_iterator);
}
推荐阅读
- ag-grid - ag-Grid - 在行悬停时显示按钮,就像在 Gmail 中一样
- c++ - 错误:在参数中无效使用 void 表达式
- python - 表单中的数据未使用 flask-sqlalchemy 添加到数据库中
- javascript - $.ajax 之后编码错误的 Blob
- android - 为什么实时数据测试总是返回 null?
- php - Laravel 7错误解码的帖子
- python - 在 Pyspark 中动态读取 Hive 表分区文件
- sorting - Altair Color 覆盖/删除排序顺序
- html - shadowBlur(html画布)在js循环中不起作用
- python - Pandas:如何根据另一列替换列中的 Nan 值?