我有一个班级CalculatePrice
。运行此代码:
$calc = new CalculatePrice( 10, 20 );
print_r ( $calc->do() );
do()
方法返回一个名为PriceObj
的其他类。如果我运行代码echo $calc->do()
,那么我会收到错误:类PriceObj的对象无法转换为字符串。
我的问题是:如何仍然从do()
方法返回一个对象,但是当对它运行回声时,它会返回一个字符串甚至更简单;对或错?这可能吗?
答案 0 :(得分:3)
当使用__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';
答案 1 :(得分:1)
您只能回显字符串。但幸运的是,您可以将对象转换为字符串。这可以通过提供__toString()
函数
这是一种魔术方法,可以完全按照您的意愿执行:从对象中创建一个字符串。请参阅:http://www.php.net/manual/en/language.oop5.magic.php#object.tostring
基本的是你是唯一一个知道如何从对象中创建一个字符串的人(例如,在内部显示全部或部分变量),所以你需要实现字符串的构建方式。
答案 2 :(得分:1)
在__toString()
上实施魔术方法PriceObj
。
所以:
public function __toString()
{
echo $this->result; // The calculated price
}