0

クラスがありCalculatePriceます。このコードの実行:

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

このdo()メソッドは、 という別のクラスを返しますPriceObj。コードを実行するecho $calc->do()と、エラーが発生します:クラス PriceObj のオブジェクトを 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 に答える