我在我的应用程序中发现了一些奇怪的东西。
很难描述我的概率,因为我无法与您分享可复制的样本。
主要问题是关于 array_walk 函数的第三个参数。
$row = array("user_id" => 1, "first_name" => "bobby");
$data = array("user_id" => "fc_name", "first_name" => "fc2_name", "email" => "fc3_name");
$res = array_walk( $row, 'fu', $aParams);
function fu(&$cell, $key, $data) {
return call_user_func_array($data[$cell], array($cell, $key, $data));
}
当我运行脚本时,它被中止而没有错误。调试后发现$data被修改,变成了递归数组。
Array
*RECURSION*
我无法理解 $data 在通过 copy 传递时如何修改?我知道您没有关于执行的所有信息,并且在 call_user_func_array 中还有许多其他调用。
谢谢
PS:我用 Xdebug 记录所有跟踪,但我找不到奇怪的东西。
UPDATE1:如果我在 foreach 循环中翻译 array_walk 没问题
UPDATE2:Update1 让我明白问题不是纯粹的 PHP 代码,我为什么要寻找“堆栈溢出”(真正的 :))或段错误。我在官方 php 错误报告https://bugs.php.net/bug.php?id=61730上发现了这个错误,我的 php 版本不固定(5.3.2)我检查了我的 array.c。这个场景很接近我的,所以我会尽可能更新 php(企业流程......)。
我期待很多这个修复。