总是让我(以及其他所有人)关于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过去的遗产,但必然有这样的事情以这种方式完成。我可以看到像PHP 5+那样通过引用ID传递一个对象的值(我猜它是介于传递引用和传递值之间),但不是在字符串,数组,整数等情况下。 / p>
我不是计算机科学领域的专家,所以你可能会聚在一起我仍然试图掌握其中的一些概念,我很好奇是否有理由设置这个方式,或者它是否只是一个剩余的。
答案 0 :(得分:2)
主要原因是PHP是由C程序员开发的,这是一个非常多的C编程范例。在C中,将指针传递给想要更改的数据结构是有意义的。在PHP中,没有那么多(除其他外,因为引用与指针不同)。
答案 1 :(得分:2)
我相信这是为了速度原因 大多数情况下,您需要对正在处理的阵列进行排序,而不是复制。
如果sort应该返回一个新的数组副本,那么每次调用sort(); PHP引擎应该将数组复制到新数组(降低速度和增加空间成本),你将无法控制这种行为。
如果您需要对原始数组进行排序(并且这种情况不常发生),那么就这样做:
$copy = $yourArray;
sort($yourArray);