在其他语言中,通常的做法是拥有多个返回值。例如,在Lua,人们可以写:
local _, _, r1, r2 = string.find(...)
(_
在lua常见做法中为“扔掉”返回值)
list(, , $r1, $r2) = string_find(...);
虽然你几乎可以在所有程序中看到Lua中多个返回值的使用情况(几乎在每个程序中),我在PHP中经常看到这一点 - 除了while(list(...) = each(...)) { }
情况。
您对多个返回值有什么看法,尤其是在PHP中 - 良好实践或错误的代码?
谢谢!
答案 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
:)