1

关于 PHP 一直困扰着我(以及其他所有人)的一件事是它在函数命名和参数方面的不一致。另一个最近的烦恼是它倾向于通过引用而不是值来请求函数参数。

我快速浏览了 PHP 手册,并找到了该函数sort()作为示例。如果我正在实现该函数,我将按值获取一个数组,将其排序到一个新数组中,然后返回新值。在 PHP 中,sort()返回一个布尔值,并修改现有数组。

我想怎么称呼sort()

$array = array('c','a','b');
$sorted_array = sort($array);

PHP希望我如何调用sort()

$array = array('c','a','b');
sort($array);
$sorted_array = $array;

此外,以下会引发致命错误:Fatal error: Only variables can be passed by reference

sort(array('c','a','b');

我想这其中的一部分可能是 PHP 过去的遗留物,但这样做肯定是有原因的。我可以看到通过引用 ID 传递对象的值,就像 PHP 5+ 所做的那样(我猜这有点在按引用传递和按值传递之间),但在字符串、数组、整数等的情况下则不然。

我不是计算机科学领域的专家,所以你可能会猜到,我仍然试图掌握其中一些概念,我很好奇事情是否有这样的原因,或者是否只是剩菜。

4

2 回答 2

2

主要原因是 PHP 是由 C 程序员开发的,这在很大程度上是一种 C 编程范式。在 C 中,将指针传递给要更改的数据结构是有意义的。在 PHP 中,没有那么多(除其他外,因为引用与指针不同)。

于 2012-06-12T20:46:12.407 回答
2

我相信这是出于速度原因。
大多数时候,您需要对正在处理的数组进行排序,而不是副本。

如果 sort 应该返回数组的一个新副本,那么每次调用 sort(); PHP 引擎应该已将数组复制到新数组中(降低速度并增加空间成本),您将无法控制这种行为。

如果您需要不对原始数组进行排序(并且这种情况不会经常发生),那么只需执行以下操作:

$copy = $yourArray;
sort($yourArray);
于 2012-06-12T20:49:07.077 回答