gpt4 book ai didi

php - 一个函数的多次返回

转载 作者:IT王子 更新时间:2023-10-29 00:53:00 24 4
gpt4 key购买 nike

是否可以有一个像这样有两个返回的函数:

function test($testvar)
{
// Do something

return $var1;
return $var2;
}

如果是这样,我怎样才能分别获得每个返回?

最佳答案

从技术上讲,您不能返回多个值。但是,有多种方法可以解决该限制。最像返回多个值的方式是使用 list 关键字:

function getXYZ()
{
return array(4,5,6);
}

list($x,$y,$z) = getXYZ();

// Afterwards: $x == 4 && $y == 5 && $z == 6
// (This will hold for all samples unless otherwise noted)

从技术上讲,您将返回一个数组并使用 list 以不同的值存储该数组的元素,而不是存储实际的数组。使用此技术将使它感觉最像返回多个值。

list 解决方案是一种特定于 php 的解决方案。有一些语言具有相似的结构,但更多的语言却没有。还有另一种通常用于“返回”多个值的方法,它几乎适用于每种语言(以一种或另一种方式)。但是,此方法看起来会很不一样,因此可能需要一些时间来适应。

// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
$a = 4;
$b = 5;
$c = 6;
}

getXYZ($x, $y, $z);

此技术也用于 php 本身定义的一些函数中(例如 str_replace 中的 $countpreg_match 中的 $matches)。这可能与返回多个值感觉完全不同,但至少值得了解一下。

第三种方法是使用一个对象来保存您需要的不同值。这是更多的打字,所以不像上面两种方法那样经常使用。但是,当在许多地方使用同一组变量时(或者当然,使用不支持上述方法或允许您无需额外输入即可执行此操作的语言),使用它可能是有意义的。

class MyXYZ
{
public $x;
public $y;
public $z;
}

function getXYZ()
{
$out = new MyXYZ();

$out->x = 4;
$out->y = 5;
$out->z = 6;

return $out;
}

$xyz = getXYZ();

$x = $xyz->x;
$y = $xyz->y;
$z = $xyz->z;

以上方法总结了函数返回多个值的主要方式。但是,这些方法存在变体。最有趣的变体是那些实际上返回数组的变体,这仅仅是因为在 PHP 中可以使用数组做很多事情。

首先,我们可以简单地返回一个数组,而不是把它当作一个数组:

function getXYZ()
{
return array(1,2,3);
}

$array = getXYZ();

$x = $array[0];
$y = $array[1];
$z = $array[2];

关于上面的代码,最有趣的部分是函数内部的代码与我提供的第一个示例中的代码相同;只有调用函数的代码发生了变化。这意味着如何处理函数返回的结果取决于调用函数的人。

或者,可以使用关联数组:

function getXYZ()
{
return array('x' => 4,
'y' => 5,
'z' => 6);
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

Php 确实有 compact 功能,它允许您执行与上面相同的操作,但编写的代码更少。 (好吧,示例不会有更少的代码,但真实世界的应用程序可能会。)但是,我认为节省的输入量是最小的,并且它使代码更难阅读,所以我不会自己做。不过,这里有一个示例:

function getXYZ()
{
$x = 4;
$y = 5;
$z = 6;

return compact('x', 'y', 'z');
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

应该注意的是,虽然 compactextract 中确实有一个对应项,可以在此处的调用代码中使用,但由于使用它不是一个好主意 (特别是对于像这样简单的事情)我什至不会为此提供示例。问题在于它会“变魔术”并为您创建变量,而如果不转到代码的其他部分,您将无法看到创建了哪些变量。

最后,我想提一下 list 不能真正与关联数组一起使用。以下将执行您期望的操作:

function getXYZ()
{
return array('x' => 4,
'y' => 5,
'z' => 6);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

但是,以下将做一些不同的事情:

function getXYZ()
{
return array('x' => 4,
'z' => 6,
'y' => 5);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

// Pay attention: $y == 6 && $z == 5

如果你将 list 与关联数组一起使用,并且其他人必须在将来更改被调用函数中的代码(这可能发生在任何情况下)它可能会突然崩溃,所以我建议不要将 list 与关联数组结合使用。

关于php - 一个函数的多次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com