2010-03-10 56 views
4

我正在做一個求職應用程序的開卷問答題,這顯然突出了我的PHP知識中的一個缺點。php類的異常處理問題

請注意,我並不是直接要求回答,而是要求顯示我誤解/缺乏如何回答的問題。現在的問題是:

3. Finish the following class to print "Person->name has been zapped" when the 
following is executed on a Person object: print $person; 


class Person{ 
    private $name = ''; 
    public function __construct($name){ 
    $this->name = $name; 
    } 
} 

$person = new Person('fred'); 
print $person; // fred has been zapped 

現在,無論是有增加異常處理類(雖然我還以爲「打印」將引發異常的東西,或者我只是誤解了問題的一些方法。我知道(從一個快速測試中)把打印放在try..catch中仍然會導致程序失敗並出現「可捕捉的致命錯誤」(我的catch沒有觸發)。

我該讀什麼on?

David

+0

試圖不回答你的問題;相反,試圖給你一個提示:在問題(#3)中哪裏是例外情況?是什麼讓你覺得你需要使用try ... catch? – Josh 2010-03-10 15:42:16

回答

4

嗯,聲音更像是在尋找你對PHP5類的知識。我建議看看PHP的magic methods,以更深入地瞭解如何完成你想要做的事情。

基本上,您正在尋找具有相關對象的可打印表示。

3

當您嘗試回顯/輸出一個對象時,將調用神奇方法__toString() - 如果它定義的對象是該對象的實例。

在這裏,你將不得不修改類,以添加__toString方法的定義,將返回的名字,而「已輪迴一圈」字符串的一部分:

class Person{ 
    private $name = ''; 
    public function __construct($name){ 
    $this->name = $name; 
    } 
    public function __toString() { 
    return $this->name . ' has been zapped'; 
    } 
} 

$person = new Person('fred'); 
print $person; // fred has been zapped 

你會得到預期的輸出:

fred has been zapped