我有一个类CalculatePrice
.运行此代码:
$calc = new CalculatePrice( 10, 20 );
print_r ( $calc->do() );
do()
方法返回一个名为 PriceObj
的不同类。如果我echo $calc->do()
运行代码,则会出现错误:类 PriceObj 的对象无法转换为字符串。
我的问题是:我怎么仍然可以从 do()
方法返回一个对象,但在对它运行回显时,它会返回一个字符串甚至更简单;真或假?这可能吗?
当对象可以使用 __toString()-方法转换为字符串时,这是可能的:
class A {
private $val;
public function __construct($myVal) {
$this->val = $myVal;
}
public function __toString() {
return "I hold ".$this->val;
}
}
$obj = new A(4);
echo $obj; // will print 'I hold 4';
您只能回显字符串。但幸运的是,您可以将对象转换为字符串。这可以通过提供__toString()
功能自动完成
这是一个神奇的方法,可以完全按照你想要的去做:用一个对象做一个字符串。请参阅: http://www.php.net/manual/en/language.oop5.magic.php#object.tostring
基本的事情是你是唯一知道如何从对象制作字符串的人(例如显示里面的全部或部分变量),所以你需要自己实现字符串的构建方式。
在PriceObj
上实现魔术方法__toString()
。
所以:
public function __toString()
{
echo $this->result; // The calculated price
}
请参阅 http://php.net/manual/en/language.oop5.magic.php