return
语句是任何函数的结束。这就是为什么当一个函数完成它需要做的任何事情时,它被称为“已经返回” 。这不是 OO 独有的,而是所有编程语言中的函数。
你想做的是:
return $this->author.'<br/>'.$this->bookName.'<br/>';
在这里,我将所有值连接成一个字符串常量,然后返回。这样,我就有了一个返回值和一个带有所需输出的返回语句。
就像我说的,即使是非方法(常规函数)也不能返回超过 1 个值 - 它们也不能返回少于1 个值:
function aFunction()
{
echo '123';
}
虽然缺乏明确的回报:
$foo = 'not null';
$foo = aFunction();
var_dump($foo);//null!
该函数显然确实 return null
,就像在 C 中一样,一个不需要返回任何值的函数,returnsvoid
或 JavaScript 函数返回undefined
。这同样适用于方法:它们返回 null、隐式或单个显式返回值。
你也可以这样写代码:
function sillyFunction($someArgument = 1)
{
return true;
if ($someArgument < 0)
{
return false;
}
if ($someArgument === 0)
{
return null;
}
return $someArgument%2;
}
这个函数以一个return true;
语句开始。后面的任何代码都不会被访问,因此永远不会被执行,因为这个函数必须向调用者返回一些东西,然后调用者再次接管。您无法返回该功能并继续您在那里所做的事情。函数是一次性的。
解决方法:幸运的是,对象和数组被视为单个值,因此它们可以从函数返回,并且可以包含多个值。所以这是以某种方式让函数返回多个值的最常见方法。唯一的小缺点是,一旦函数返回,您对所有这些值只有一个访问点:您分配返回值的变量:
function foo()
{
return array('foo' => range(1,100), 'bar' => range('A','Z'));
}
$foo = foo();
echo $foo['foo'][1], ' => ', $foo['bar'][1];//echoes 2 => B
在一些非常罕见的情况下(在过去的 10 年中,我需要这个 ~5 次)你可以使用引用返回几个值:
function changeArrayAndReturn(array &$arrayRef)
{
array_push($arrayRef, 'I was added in the function');//alters array
return count($arrayRef);//AND returns int
}
$foo = array();
echo changeArrayAndReturn($foo);//echoes 1
$foo[] = 'I was added outside of the function';
echo changeArrayAndReturn($foo);//echoes 3
var_dump($foo);
//array(I was added in the function, I was added outside of the function, I was added in the function)
但这很危险且难以维护,所以请远离,除非您真的无法以其他任何方式做到这一点