0

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

我打印到屏幕上的是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

4 回答 4

2

你可以返回一个listarray

public function hello($result,$test) {
        $result = 4+4;
        $test = 10+5;
        return array($result, $test);
    }
于 2013-09-13T02:06:15.793 回答
1

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

于 2013-09-13T02:06:56.417 回答
1

使用参数引用

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

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

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

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

于 2013-09-13T02:09:01.630 回答
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;

我会尽量避免通过引用传递(尤其是在类定义中),除非您有正当理由这样做。创建类的实例时这是不好的做法(即“粘性值”,如果你愿意的话)。

于 2013-09-13T02:23:42.770 回答