2010-09-07 121 views
0

我想用get_class($var)來顯示一個對象的類。什麼是最好的方法來做到這一點?我此刻的代碼是:從父類中獲取對象類名?

abstract class userCharacter { 

    var $cName; 
    var $cLevel = 0; 
    var $cHP = 50; 
    var $cMP = 20; 

    function __construct($n) { 
     $this->cName = $n; 
    } 

    function showDetails() { 
     echo $this->cName . "<br />"; 
     echo "Level: " . $this->cLevel . "<br />"; 
     echo "HP: " . $this->cHP . "<br />"; 
     echo "MP: " . $this->cMP . "<br />"; 
    } 
} // userCharacter 

class warrior extends userCharacter { 
} // warrior 

我創建的對象:

$charOne = new warrior($name); 

什麼,我想要做的是在userCharacter類的showDetails()功能有類似的一行:

echo "Class: " . get_class($charOne) . "<br />"; 

但是,我敢肯定,這將無法工作,因爲$charOne變量不是在正確的範圍內。

我想,我需要的東西,如申報$charOne

global $charOne = new warrior($name); 

將這項工作?如果沒有,如果可能的話,最好的辦法是什麼?

回答

1

你想

echo get_class($this) ; 

在運行時,實際的類會想通了。這就是多態的好處。

然而,甚至更好,你想要做這樣的事情:

echo $this->getClassDisplayName(); 

然後寫每個子類的功能。

或者,基類可以有這種類型的函數:

function getClassDisplayName() 
{ 
    return ($this->classDisplayName == "" ? getClass($this) : $this->classDisplayName); 
} 

然後在你的子類的構造函數:

public __construct() 
{ 
    $this->classDisplayName = "The Mighty Warriors of Azgoth"; 
} 
+0

哦,是啊,這是很酷。感謝你的回答。我越玩OOP越愛我! – 2010-09-07 21:06:45