2013-08-22 52 views
0

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

// 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; 

错误,

Catchable fatal error: Method TestClass::__toString() must return a string value in C:\wamp\www\test\2013\php\fluent_interface.php on line 2

我应该使用不同的魔术方法,而不是__toString呢?

编辑: 我能回到这是我的结果,

stdClass Object ([title] => page 1) 
+0

你究竟想要做什么? – Dragony

+0

请参阅我上面的修改。谢谢。 – laukok

回答

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

+0

感谢您的答案。 – laukok

+0

但似乎我无法访问该对象内的属性,例如,'$ class = new TestClass($ input); echo $ class-> title;'我得到这个错误'注意:未定义的属性:TestClass :: $ title在C:... fluent_interface.php在第23行而不是在第1页...我怎样才能访问对象内部的数据呢? – laukok

+1

您的类中的foo属性包含另一个对象,即您的数据。在你的例子中,你应该使用这个语法:$ class-> foo-> title – Dragony

1

我认为你正在寻找要么print_rvar_export功能:

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

和var_export更好,因为它也返回值的类型(并且,除此之外,有效的P HP代码格式)。请注意,__toString()方法与流畅的接口没有任何共同之处。这只是不同的事情。

+0

谢谢但我怎么才能访问返回对象内的数据呢?例如'echo $ class-> title;'我想得到'page 1'作为结果。可能吗? – laukok

+0

我不确定你想达到什么目的。用那些传递给构造函数的类来替换你的类实例?如果是,为什么? –

+0

对不起,我通过这样做了'echo $ class-> foo-> title;'谢谢你的帮助。 – laukok