PHP与JavaScript:改变传入数组的值会产生不同的结果


PHP vs JavaScript: Altering the value of an array passed in gives different results

为这篇文章想出一个明智的标题是非常困难的。

虽然PHP和JS是完全不同的语言,但我很惊讶地发现,改变作为参数传递给函数的数组会产生不同的结果。

PHP

<?php 
function thing($arr) {
    $arr[2] = "WOOF";
}
$hello = array(1,2,3,4);
thing($hello);
print_r($hello);
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
?>
Javascript

function thing($arr) {
    $arr[2] = "WOOF";
}
$hello = [1,2,3,4];
thing($hello);
console.log($hello);
// [1, 2, "WOOF", 4]

哪个是"正确的"?

为什么这里的结果不同?为什么JS接受参数只是原始数组的别名,而PHP不接受?

哪一种方式是最"正确"的——为什么?

在javascript对象是通过引用传递的,所以你得到这样的结果,所以说,这两个结果都是真实的在自己的领域。

你也可以通过控制台试试。

>>> var s = [1,2,3,4];
undefined
>>> var b = s;
undefined
>>> b;
[1, 2, 3, 4]
>>> s;
[1, 2, 3, 4]
>>> b[2] = "data";
"data"
>>> b;
[1, 2, "data", 4]
>>> s;
[1, 2, "data", 4]

在php中你给函数值"$arr",在JS中-对象"$arr"

<?php 
function thing($arr) {
    $arr[2] = "WOOF";
return ($arr);
}
$hello = array(1,2,3,4);
$hello=thing($hello);
print_r($hello);
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
?>