2013-11-03 34 views
0

我有一個類CalculatePrice。運行此代碼:PHP類 - 返回對象,但回聲字符串

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

do()方法返回一個名爲PriceObj不同的類。如果我運行代碼echo $calc->do(),那麼出現錯誤:類PriceObj的對象無法轉換爲字符串

我的問題是:我如何仍然可以從do()方法返回一個對象,但運行回聲時,它會返回一個字符串或更簡單;對或錯?這可能嗎?

+0

你能後的代碼? –

+0

只需編寫'return $ calc-> do()',並在你的代碼中回顯那個期望的屬性或者調用它的一個函數(並且那個函數會'回顯'你想要的) –

回答

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'; 
+0

輝煌。不知道這個神奇的方法 - 非常感謝。 –

1

您只能回顯字符串。但幸運的是,你可以將你的對象轉換爲一個字符串。這可以通過提供__toString()函數來自動完成

這是一種神奇的方法,它完全按照您的要求進行:從對象中創建一個字符串。見:http://www.php.net/manual/en/language.oop5.magic.php#object.tostring

基本的是你是唯一知道如何從對象中創建一個字符串(例如顯示全部或部分變量)的字符串,所以你需要實現如何構建字符串你自己。

+0

我現在已經實現了它並且它可以工作。非常感謝! –