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

Bry*_*yce 2 javascript php arrays functional-programming

很难为这篇文章提供明确的标题.

尽管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 )
?>
Run Code Online (Sandbox Code Playgroud)

使用Javascript

function thing($arr) {
    $arr[2] = "WOOF";
}

$hello = [1,2,3,4];
thing($hello);
console.log($hello);
// [1, 2, "WOOF", 4]
Run Code Online (Sandbox Code Playgroud)

哪个是对的"?

为什么这里的结果会有差异?为什么JS接受参数只是原始数组的别名,但PHP不是?

哪种方式最"正确" - 为什么?

Vin*_*uis 6

在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]
Run Code Online (Sandbox Code Playgroud)