0

我有一堂课CalculatePrice。运行此代码:

$calc = new CalculatePrice( 10, 20 );
print_r ( $calc->do() );

do()方法返回一个名为 的不同类PriceObj。如果我运行代码echo $calc->do(),则会收到错误消息:Object of class PriceObj could not be convert to string

我的问题是:我怎样才能仍然从该do()方法返回一个对象,但是当对它运行回显时,它返回一个字符串甚至更简单;对或错?这可能吗?

4

3 回答 3

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';
于 2013-11-03T13:02:26.840 回答
1

您只能回显字符串。但幸运的是,您可以将对象转换为字符串。这可以通过提供一个__toString()函数来自动完成

这是一种神奇的方法,可以完全满足您的要求:从对象中创建一个字符串。见:http ://www.php.net/manual/en/language.oop5.magic.php#object.tostring

基本的事情是你是唯一一个知道如何从对象中生成字符串的人(例如显示内部的全部或部分变量),所以你需要自己实现字符串的构建方式。

于 2013-11-03T13:02:19.320 回答
1

__toString()您的PriceObj.

所以:

public function __toString()
{
    echo $this->result; // The calculated price
}

http://php.net/manual/en/language.oop5.magic.php

于 2013-11-03T13:02:22.330 回答