0

我很好奇在 PHP OOP 中编写链接接口。我从 php.net 网站修改了这个示例代码,我想更进一步——如何从这种接口返回对象或数组?

// Declare a simple class
class TestClass
{
    public $foo;

    public function __construct($foo)
    {
        $this->foo = $foo;
    }

    public function __toString()
    {
        return $this->foo;
    }
}

$input = (object)array("title" => "page 1");
$class = new TestClass($input);
echo $class;

错误,

可捕获的致命错误:方法 TestClass::__toString() 必须在第 2 行的 C:\wamp\www\test\2013\php\fluent_interface.php 中返回字符串值

我应该使用不同的魔术方法而不是__toString那样吗?

编辑: 我可以将其作为结果返回吗?

stdClass Object ( [title] => page 1 )
4

2 回答 2

1

我认为您正在寻找print_rvar_export函数:

public function __toString()
{
    return var_export($this->foo, true);
}

并且 var_export 更好,因为它还返回值的类型(此外,以有效的 PHP 代码格式)。请注意,该__toString()方法与流畅的界面没有任何共同之处。这只是不同的事情。

于 2013-08-22T13:13:56.357 回答
1

要获得您想要的内容,您需要使用以下语法:

print_r($class->foo);

__toString() 魔术方法尝试将您的整个类 'TestClass' 转换为字符串,但由于魔术方法没有返回字符串,它会向您显示该错误。当然,您也可以重写 __toString() 方法来执行以下操作:

public function __toString()
{
    return print_r($this->foo, true);
}

http://php.net/manual/en/function.print-r.php

http://www.php.net/manual/en/language.oop5.magic.php#object.tostring

于 2013-08-22T13:09:03.633 回答