一个 PHP 函数能返回多个变量吗?

7

一个 PHP 函数能否在不使用数组的情况下返回多个变量?

我想要这样:

<?php

public function a()
{
   $a = "a";
   $b = "b";
   $c = "c";

}

echo a()->a;
echo a()->b;
echo a()->c;

?>

如何访问 $a,$b,$c 变量?


8个回答

8

你可以使用关联数组并将其转换为对象,而不是使用普通数组,这样你就可以使用->对象语法访问元素:

function a()
{
  return (object) array(
    'a' => "a",
    'b' => "b",
    'c' => "c");
}

echo a()->a;  // be aware that you are calling a() three times here
echo a()->b;
echo a()->c;

6
function a1() {
    return array(
        'a' => 'a',
        'b' => 'b',
        'c' => 'c'
    );
}
$a1 = a1();
echo $a1['a'];
echo $a1['b'];
echo $a1['c'];

function a2() {
    $result = new stdClass();
    $result->a = "a";
    $result->b = "b";
    $result->c = "c";
    return $result;
}
$a2 = a2();
echo $a2->a;
echo $a2->b;
echo $a2->c;
// or - but that'll result in three function calls! So I don't think you really want this.
echo a2()->a;
echo a2()->b;
echo a2()->c;

3
创建一个类来存储你的三个变量,并返回该类的实例。示例:
<?php
class A {
    public $a;
    public $b;
    public $c;

    public function __construct($a, $b, $c) {
        $this->a = $a;
        $this->b = $b;
        $this->c = $c;
    }
}

function a() {
    return new A("a", "b", "c");
}

echo a()->a;
echo a()->b;
echo a()->c;
?>

当然,最后三行并不是特别高效,因为a()被调用了三次。一个明智的重构将导致这三行代码被更改为:

$a = a();
echo $a->a;
echo $a->b;
echo $a->c;


2
如果您想以这种方式访问这些变量(而不使用数组),最好使用类:
class Name{
    var $a = "a";
    var $b = "b";
}

$obj = new Name();
echo $obj->a;

这段代码是错误的,你应该这样声明和赋值变量:var $a = "a",或者更好地使用显式可见性关键字:public $a = 'a'protected $a = 'a'private $a = 'a' - Igor Zinov'yev
是的,我知道...我这样写是因为它可以在PHP4和PHP5上运行。这真的很傻,但是有数百万个PHP4服务器存在(php4不支持访问修饰符),管理员太懒得升级 :D - Cristian
还有人在使用php4的需要被枪毙。 - ThiefMaster

2

1

PHP手册 > 返回值

A function can not return multiple values, but similar results can be obtained by returning an array.

<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();

这里不需要类。


1

当返回变量必须是数组或长字符串,其中包含多个值,用任何分隔符(如“,|#”等)分隔时,这是可能的。

如果它被构建为数组,我们可以使用PHP中可用的var_dump函数接收它。

请参见下面的代码

var_dump($array);


返回需要解析的字符串会非常丑陋。 - ThiefMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接