【发布时间】:2011-08-16 18:46:01
【问题描述】:
我注意到 PHP 手册中有一些不一致之处;许多核心函数签名被记录为通过引用接受参数,但是它们通过值接受参数。
我之前发布了更多 specific question,@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.php-
arrayarray_replace_recursive( array&$array, array&$array1[, array@987654334 @... ] ) - 按值接受参数
$array、$array1等。 此问题已得到纠正。
-
-
http://www.php.net/manual/en/function.array-multisort.php
-
boolarray_multisort( array&$arr[, mixed$arg=SORT_ASCem>[, 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)是否对为什么有洞察力已经完成了。
【问题讨论】: