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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions