比如我有一個類A:
class A
{
public $a;
public $b;
public $c;
public function __construct($a, $b, $c)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
}
如果我直接輸出:
$a = new A(1,2.2,'3.3');
echo $a;
會報一個致命錯誤(fatal error)提示說對象不發轉換成字符串,PHP的對象時分不出是聲明還是賦值的,假如我不知道$a是對象呢,而把他當做字符串輸出了怎麼辦?有沒有可以容錯的機制嗎?有,php中的魔術方法--__toString()。
舉例來說,我在對象A中假如如下代碼:
public function __toString(){
return '對象不能當做字符串輸出';
}
這樣直接輸出的時候,就會輸出這串字符串,或者你可以在__toString()方法中拋異常,手動提示錯誤都是可以的,但是避免了因爲不知道是不是對象類型,而導致的致命錯誤。
大家都知道PHP中,對象是無法直接轉換成字符串的,我們是否可以通過__toString()方法操作下什麼嗎?我把__toString()方法稍微改一改:
public function __toString(){
return json_encode($this);
}
好消息是__toString()方法,可以直接通過類調用,然後我們通過這樣就可以得到了:
$a = new A(1,2.2,'3.3');
echo $a->__toString();
看看運行結果,我們就得到了,json_encode()化的對象了:
當然,你也可以序列化成字符串,都是可以的