0

我正在学习 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
4

3 回答 3

4

您不能在一个函数中多次返回。

如果您需要返回多个值,您可以执行以下操作:

return array('author'=>$this->author, 'bookName'=>$this->bookName);

并像这样使用它:

$res = $obj->getproperty();
echo "Author is ".$res['author'];
echo "Book is ".$res['bookName'];

您可能希望根据方法的用途/使用方式来更改此设置。

于 2013-08-08T12:49:38.197 回答
1

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)

但这很危险且难以维护,所以请远离,除非您真的无法以其他任何方式做到这一点

于 2013-08-08T12:54:43.113 回答
0

函数在遇到第一个 时停止return。所以它永远不会到达你注释掉的那一行(即使它不是注释)。

public function getproperty()
{
  return $this->author."<br />".$this->BookName."<br />";
}

这样你就可以用一个return. 如果您愿意,也可以返回一个数组。

于 2013-08-08T12:52:54.060 回答