【问题标题】:Pass by reference or return array in PHP? [closed]在 PHP 中通过引用传递或返回数组? [关闭]
【发布时间】:2012-03-01 05:27:04
【问题描述】:

我的所有函数都有多个参数并且需要返回多个值,我返回一个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

这真的很重要吗?使用上面的示例时,我什么时候想使用其中一个?性能有区别吗?

谢谢

【问题讨论】:

  • 因为这是一个观点,这个问题可能并不完全适合这个论坛,但我个人认为你上面的例子可能比通过引用传递更干净,做得更好,这有点懒惰,如果您的代码封装得很好,阅读它时很难看出为什么您的 $a 和 $b 值突然不同。我认为你的第一个例子,就个人而言,是要走的路。
  • 对不起,我被另一位成员从另一个问题中问了这个问题。谢谢你的评论。我只是想知道是否根据这样做是好还是坏的做法来更改我的代码。但我知道第一个例子更容易理解。
  • No yes or no answer确实,我同意第一个例子更清楚,你的同事会感谢你的清晰。
  • 谢谢@Wrikken。我知道这个问题含糊不清,但我不知道还能去哪里问!
  • 根据你的真实代码应该做什么,接受参数并返回一个对象也是有意义的。或者,更好的是,将eg() 实现为类方法。在给出的示例中,这有点矫枉过正......但在实际应用中,这种方法可能更简洁。

标签: php pass-by-reference


【解决方案1】:

正如大多数 cmets 所指出的,第一种方法(返回一个数组)更简洁、更易于理解,因此按照该指标,它“更好”。

不过,根据您的用例,最好不要尝试返回多个值。考虑:

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();

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

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2013-07-07
    • 2015-07-04
    • 2011-05-24
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多