我正在学习php OOP。在编写类时,我遇到了一个逻辑问题,即函数没有返回多个值,我只是将默认值作为输出。 当我在函数 setproperty()中传递两个变量并回调 getproperty()时,它只返回作者的名字。这是代码:
class library{
public $BookName="PHP OOP Programming";
public $author="Faisal";
public function setproperty($a_name,$b_name){
$this->author=$a_name;
//$this->BookName=$b_name;
}
public function getproperty(){
return $this->author."<br />";
//return $this->BookName."<br />";
}
}
$obj=new library;
//var_dump($obj);
echo $obj->getproperty();
$obj->setproperty("naseer","SQL");
echo $obj->getproperty();
我得到了输出:
Faisal
naseer
虽然我想要的输出是作者的名字和书籍,很像:
Faisal
PHP OOP Programming
naseer
SQL
答案 0 :(得分:4)
您无法在函数中多次返回。
如果您需要返回多个值,可以执行以下操作:
return array('author'=>$this->author, 'bookName'=>$this->bookName);
并像这样使用它:
$res = $obj->getproperty();
echo "Author is ".$res['author'];
echo "Book is ".$res['bookName'];
您可能希望根据方法的用途/使用方式进行更改。
答案 1 :(得分:1)
return
语句是任何函数的结束。这就是为什么当一个函数完成它需要做的任何事情时,“已经返回”的功能。这不是OO独有的,而是所有编程语言中的函数
你想要做的是:
return $this->author.'<br/>'.$this->bookName.'<br/>';
在这里,我将所有值连接成一个字符串常量,然后返回。这样,我有一个返回值,以及一个带有所需输出的return语句 就像我说的,即使是非方法(常规函数)也不能返回超过1的值 - 它们也不能返回 less 而不是1值:
function aFunction()
{
echo '123';
}
虽然缺少显式返回:
$foo = 'not null';
$foo = aFunction();
var_dump($foo);//null!
该函数显然返回null
,就像在C中一样,一个不需要返回任何值的函数,返回void
,或者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次)你可以使用引用排序几个值:< / p>
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)
但这很危险且很难维护,所以要远离,除非你真的不能以任何其他方式做到
答案 2 :(得分:0)
函数遇到第一个return
时会停止。所以它永远不会到达你注释掉的那一行(即使它不是评论)。
public function getproperty()
{
return $this->author."<br />".$this->BookName."<br />";
}
这样您可以使用单个return
显示这两个值。如果您愿意,也可以返回一个数组。