2010-09-07 120 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