从父类中获取对象类名?

时间:2010-09-07 20:57:02

标签: php oop class object

我想使用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);

我想要做的是在showDetails()类的userCharacter函数中有一行类似于:

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

但是,我很确定这不起作用,因为$charOne变量不在正确的范围内。

我想我需要用以下内容声明$charOne

global $charOne = new warrior($name);

这会有用吗?如果没有,如果可能的话,最好的方法是什么?

1 个答案:

答案 0 :(得分: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";
}