PHP中有多个返回值 - 接受/良好实践?

时间:2011-02-04 10:53:41

标签: php

在其他语言中,通常的做法是拥有多个返回值。例如,在Lua,人们可以写:

local _, _, r1, r2 = string.find(...)

_在lua常见做法中为“扔掉”返回值)

在PHP中,我必须写一些类似的东西:

list(, , $r1, $r2) = string_find(...);

虽然你几乎可以在所有程序中看到Lua中多个返回值的使用情况(几乎在每个程序中),我在PHP中经常看到这一点 - 除了while(list(...) = each(...)) { }情况。

您对多个返回值有什么看法,尤其是在PHP中 - 良好实践或错误的代码?

谢谢!

4 个答案:

答案 0 :(得分:2)

在PHP中更常见的是返回数组或对象,然后直接使用该数组或对象,而不是将所有值分配给单独的变量。

function get_preferences() {
    return array('color' => 'red', 'size' => 'large', 'material' => 'cotton');
}

$prefs = get_preferences();

echo "We're sending you a " . $prefs['size'] . " shirt.";

答案 1 :(得分:2)

要明确说明:“返回数组”与“返回多个值”不同。后来根本不可能。

我有时会将数组作为一种“tupel”返回,但是在极少数情况下需要这样做。在大多数情况下,函数/方法将返回特定值。

例如,您需要一个函数,它在给定索引处拆分字符串。在这种情况下,我将返回一个数组

function my_split ($string, $index) {
  return array(
    substr($string,0, $index),
    substr($string,$index)
  );
}
list($start, $end) = my_split("Hello World", 5);

答案 2 :(得分:1)

在PHP中使用多个返回值没有任何问题。至少如果你使用得好的话。在某些情况下,它确实可以提供帮助(例如,通过这种方式有趣地返回一个元组)。

当然,在记录此类方法时必须小心。此外,如果从方法返回20个值,则会出现一些问题。但是,它再次与PHP无关。

现在,为什么它在PHP中不经常使用?在我看来,因为大多数编写PHP程序的人都没有意识到这一点。

答案 3 :(得分:0)

如果合理使用,我认为没关系。您的第二个示例,即while(list(...) = each(...))的示例,是不使用它的示例。这只是foreach循环的较慢变体。

PS:我最近发现的东西:一个可以嵌套list()s:)