Skip to content

函数中引用传参 #77

@meixg

Description

@meixg

TS 中函数的参数默认为引用传递:

let a = [];
function aaa(b) {
    b[0] = 1;
}
aaa(a);
console.log(a[0]); // 1

但 PHP 中默认为值传递:

$a = array();
function aaa($b) {
    $b['0'] = 1;
}
aaa($a);
echo $a['0']; // undefined

如果在转换函数定义时,参数部分增加 &,可以解决上述问题。

$a = array();
function aaa(&$b) {
    $b['0'] = 1;
}
aaa($a);
echo $a['0']; // 1

但函数参数为字面量形式时会报错,目前找到好的解决方法:

function aaa(&$b) {
    $b['0'] = 1;
}
aaa(array()); // Error

此外,如果函数返回值也会有引用传递问题,例如:

let a = [];
function bbb(c) {
    return c;
}
let b = bbb(a);
b[0] = 1;
console.log(a[0]); // 1

需要翻译成如下 PHP 代码才能有同样效果:

$a = array();
function &bbb(&$c) {
    return $c;
}
$b = &bbb($a);
$b["0"] = 1;

echo $a["0"];

问题更加复杂了

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions