我注意到 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
$
... ]]] )
- 按值接受 arguments
$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)是否对这样做的原因有所了解。