Получить имя класса объекта из родительского класса? - PullRequest
0 голосов
/ 08 сентября 2010

Я хочу использовать 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 Ответ

1 голос
/ 08 сентября 2010

Вы хотите

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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...