通过引用传递或返回PHP中的数组?

时间:2012-02-08 18:13:26

标签: php pass-by-reference

我的所有具有多个参数且需要返回多个参数值的函数我都会返回array ...

function eg($a, $b) {
    $a += 5;
    $b += 10;
    return array('a' => $a, 'b' => $b);
}
$no = eg(0, 5);
echo $no['a']; // 5
echo $no['b']; // 10

与通过引用相比,这被认为是不好的做法,即

function eg(&$a, &$b) {
    $a += 5;
    $b += 10;
}  
eg(0, 5);
echo $a; // 5
echo $b; // 10

这真的很重要吗?在使用上述示例时,我何时想要使用其中一个?表现有什么不同吗?

由于

1 个答案:

答案 0 :(得分:7)

正如大多数评论所指出的那样,第一种方法(返回数组)更清晰,更容易理解,因此通过该指标,它“更好”。

但是,根据您的使用情况,最好不要尝试返回多个值。考虑:

public function getDimensions() {
    return array(
        'width' => $this->_width,
        'height' => $this->_height
    );
}

$dim = $canvas->getDimensions();
echo $dim['width'], ' x ', $dim['height'];

与:相比:

public function getWidth() {
    return $this->_width;
}

public function getHeight() {
    return $this->_height;
}

echo $canvas->getWidth(), ' x ', $canvas->getHeight();

这显然是一个人为的例子,但想象一下你的方法做了一些昂贵而不是轻浮的事情。现在假设您只需要第一组值,但由于您的方法为每次调用计算所有值,您必须浪费地计算所有内容并丢弃您不需要的内容。