5

PHP マニュアルにいくつかの矛盾があることに気付きました。多くのコア関数シグネチャは、参照によって引数を受け入れるように文書化されていますが、値によって引数を受け入れます。

以前より具体的な質問を投稿し、@cweiske が (適切な PHP ソースを参照して) すばらしい回答を提供しましたが、これらの矛盾はより蔓延しているようです。

これによって影響を受ける多くの機能があります (このリストは令状として更新します。また、これらのテストはあるerror_reporting(-1)環境で行われたことに注意してください) 。

今、私が心配しているのは、私がドキュメンテーションについて口を閉ざしているからではなく、PHP 開発者がこれらの関数の実装の詳細 (または同様に信頼できないもの)についてフェンスの中にいることを恐れているからです。

array_replace_recursive()たとえば、配列引数を取り、それをデフォルトを含む別の配列に適用するために使用します。私のコードベースの一部は、この矛盾を利用して、単純に次のことを行っています。

$values = array_replace_recursive(array(
    'setting_1' => array(
        'sub-setting_1' => '',
        'sub-setting_2' => '',
        'sub-setting_3' => '',
     ),
    'setting_2' => array(
        'sub-setting_1' => 0,
        'sub-setting_2' => 0,
     ),
     'setting_3' => true,
), $values);

したがって、適切にフォーマットされた配列を生成します(無償のisset()呼び出しを回避するため)

私はこれを気にする必要がありますか?ドキュメント関連のバグリクエストを送信することを考えていますが、SO の誰か (あなたの方向 @cweiske を探している) がなぜこれが行われたのかについての洞察を持っているかどうか、最初に興味があります。

4

1 に答える 1

2

おそらく私はあなたのジレンマを理解していませんが、これらの関数はパラメーターのデータを直接変更しないため、参照または値を介して受け入れるかどうかは、ちょっとした問題ですよね? いずれにせよ、関数呼び出しで実際に何かを実行したい場合は、戻り値を割り当てる必要があります。

不一致が見られる理由についての洞察の観点から。PHP 5 では、参照の動作方法に多くの変更が加えられました。実際、 & の特定の使用法を参照によって割り当てることを許可しなくなったのは PHP 5.3+ だと思います。参照割り当てに関する新しい規則に準拠するために、PHP コア関数の一部が移行されている可能性があります。記憶が正しければ、PHP 5.3 ブランチは実際には PHP 6 になる予定でしたが、いくつかの複雑な機能が完成するのを待たずに、ブランチとしてトランクにマージされました。これは、PHP でこれまでにこのような混乱が見られなかった理由の説明になります。

于 2011-08-16T20:32:02.897 に答える