代码之家  ›  专栏  ›  技术社区  ›  Saladin Akara

从父类中获取对象类名称?

  •  0
  • Saladin Akara  · 技术社区  · 15 年前

    我想用 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 变量不在正确的范围内。

    我想我需要申报 $CARONE 比如:

    global $charOne = new warrior($name);
    

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Zak    15 年前

    你想要

    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";
    }