0

アプリケーションに奇妙なものを見つけました。

再現可能なサンプルを共有できないため、私の問題を説明するのは難しいでしょう.

主な問題は、array_walk 関数の 3 番目のパラメーターについてです。

$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 を変更する方法です。実行に関するすべての情報を持っているわけではなく、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を更新します(エンタープライズプロセス...)。

私はこの修正の多くを期待しています。

4

1 に答える 1

0

PHP バグhttps://bugs.php.net/bug.php?id=61730 php 5.3.10 で修正 php を更新しました

于 2012-10-21T19:22:42.327 に答える