PHP 为什么 array_walk 不能与 DOMDocument::getElementsByTagName 一起使用

PHP Why does array_walk not work with DOMDocument::getElementsByTagName

只是想知道为什么下面的代码遍历
DOMDocument::getElementsByTagName

<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML('<html><head>...blablabla...</html>');
$elements = $dom->getElementsByTagName('div');
array_walk($elements, 'var_dump'); // doesn't work ?>

但是下面的代码确实有效:

<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML('<html><head>...blablabla...</html>');
$elements = $dom->getElementsByTagName('div');
foreach($elements as $element) {
  var_dump($element); // does work
} ?>

来自 getElementsByTagName() 的 return 值是 DOMNodeList 对象 ,而不是数组:DOMNodeList 对象是 Traversable,所以 foreach() 会遍历它;但是 array_walk() 需要一个 actual 数组参数,所以它不能与 array_walk().

一起使用

使用不是数组的参数调用 array_walk() 不会生成错误,但会生成警告,并且会 return 布尔值 false.