从类返回两个值

时间:2013-09-13 02:01:16

标签: php

我正在尝试理解面向对象的PHP编程并编写了一个小类来学习。我无法理解为什么它不按我打算的方式工作。我在类方法hello() $result$test中有两个变量。我试图访问存储在这两个变量中的数据并将其打印到屏幕上。我知道我可以在方法中调用一个echo,但我试图让它在它之外回显。

我打印到屏幕上的是88它不会打印出第二个变量$test。我试图理解为什么会发生这种情况。我的缺乏理解可能会在代码中显示出来。

<?php

class simpleClass{

    public function hello($result,$test) {
        $result = 4+4;
        $test = 10+5;
        return $result;
        return $test;
    }
}

$a = new simpleClass;
echo $a->hello();
echo $a->hello($result, $test);

?>

4 个答案:

答案 0 :(得分:2)

您可以返回listarray

public function hello($result,$test) {
        $result = 4+4;
        $test = 10+5;
        return array($result, $test);
    }

答案 1 :(得分:1)

由于return的工作方式,您在同一个函数中不能有多个return语句。遇到return语句时,该函数在那里停止执行,然后传回给调用者。该函数的其余部分永远不会运行。

答案 2 :(得分:1)

使用parameter referencing

class simpleClass{

    public function hello(&$result, &$test) {
        $result = 4+4;
        $test = 10+5;
    }
}

$a = new simpleClass;
$result=''; $test='';

$a->hello($result, $test);

echo $result;
echo '<br>';
echo $test;
  

8
  15

为了澄清,当你将&添加到函数参数时,该参数的值 - 如果你在函数内部更改或操作它 - 将被处理回传递的原始变量。因此,您甚至不必返回结果,然后将其打包到arraystdObject中,然后将其解压缩。但是你仍然可以从函数中返回一些东西,例如

$ok = $a->hello($result, $test);
例如,

作为指示计算是否正确的标志。

答案 3 :(得分:1)

复杂的答案是使用模型。

class simpleResultTestModel {
    public $result;
    public $test;
    public function __construct($result,$test) {
        $this->result = $result;
        $this->test = $test;
    }
}

class simpleClass {
    public function hello($result=4, $test=10) {
        $result = $result+4;
        $test = $test+5;
        return new simpleResultTestModel($result, $test);
    }
}

这样,您知道simpleClass->hello()将始终返回simpleResultTestModel的实例。

另外,我更新了你的hello方法定义。你有两个参数,但实际上并没有应用它们;我冒昧地设置默认值,然后在计算中使用它们。

用法:

$a = new simpleClass();

$first = $a->hello();
echo $first->result;
echo $first->test;

$second = $a->hello($first->result,$first->test);
echo $second->result;
echo $second->test;

我会尽量远离引用传递(特别是在类定义中),除非你有合理的理由这样做。在创建类的实例时这是不好的做法(例如,如果你愿意的话,就是“粘滞值”)。