代码之家  ›  专栏  ›  技术社区  ›  Bryce

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

  •  2
  • Bryce  · 技术社区  · 10 年前

    很难为这篇文章找到一个明智的标题。

    虽然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 )
    ?>
    

    Java脚本

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

    哪个是“正确的”?

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

    哪种方式最“正确”?为什么?

    2 回复  |  直到 10 年前
        1
  •  6
  •   Vinod Louis    10 年前

    在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]
    
        2
  •  0
  •   rjhdby    10 年前

    在php中,给函数值“$arr”,在JS-object中为“$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 )
    ?>