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 回答