PHP マニュアルにいくつかの矛盾があることに気付きました。多くのコア関数シグネチャは、参照によって引数を受け入れるように文書化されていますが、値によって引数を受け入れます。
以前より具体的な質問を投稿し、@cweiske が (適切な PHP ソースを参照して) すばらしい回答を提供しましたが、これらの矛盾はより蔓延しているようです。
これによって影響を受ける多くの機能があります (このリストは令状として更新します。また、これらのテストはあるerror_reporting(-1)
環境で行われたことに注意してください) 。
- http://www.php.net/manual/en/function.current.php
- これは、リンクされた質問ですでに説明されています
- http://www.php.net/manual/en/function.key.php
- これは、リンクされた質問ですでに説明されています
http://www.php.net/manual/en/function.array-replace-recursive.phparray
array_replace_recursive
( array
&$array
, array
&$array1
[, array
&$
... ] )
$array
、などの引数を値で受け入れ$array1
ます。これは修正されました。
- http://www.php.net/manual/en/function.array-multisort.php
bool
array_multisort
( array
&$arr
[, mixed
$arg
=
SORT_ASC
[, mixed
$arg
=
SORT_REGULAR
[, mixed
$
... ]]] )
- 引数
$arr
などを値で受け取ります。引数が変数でない場合は何もしないため、これはエラーをスローするはずです。
今、私が心配しているのは、私がドキュメンテーションについて口を閉ざしているからではなく、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 を探している) がなぜこれが行われたのかについての洞察を持っているかどうか、最初に興味があります。