Комментарии в следующем коде показывают, что я пытаюсь выполнить, что-то очень просто: я хочу чтобы иметь возможность ссылаться на имя родительского класса с использованием встроенной константы PHP (или другой конструкции), такой как __CLASS__
, но которая относится к родительскому классу, а не к текущему классу (например, parent::__CLASS__
) (также, в то время как код не показывает его, если у меня есть subsubclass, то внутри такого класса я хочу иметь возможность ссылаться на родительский класс через что-то вроде parent::parent::__CLASS__
, если это вообще возможно).Ссылаясь на имя суперкласса PHP через магическую константу/ключевое слово или аналогичную конструкцию (избегая присвоения имени суперкласса в производном классе)
class ParentClass {
protected $foo;
function __construct() {
$this->foo = "hello";
}
}
class DerivedClass extends ParentClass {
public $bar;
public $baz;
function __construct($bar) {
// I want to be able to write
// something like parent:__CLASS__
// here in place of 'ParentClass'
// so that no matter what I rename
// the parent class, this line will
// always work. Is this possible?
// if (is_a($bar, parent::__CLASS__)) {
if (is_a($bar, 'ParentClass')) {
$this->bar = $bar;
} else {
die("Unexpected.");
}
$this->baz = "world";
}
public function greet() {
return $this->bar->foo . " " . $this->baz;
}
}
$d = new DerivedClass(new ParentClass());
echo $d->greet();
ВЫВОД:
hello world
Если я понял, что право я не понимаю, почему вы когда-нибудь понадобится такой грязный конструкт. Попытайтесь описать, какую реальную проблему вы пытаетесь решить с этим. – burzum
Вы попробовали http://php.net/manual/en/function.get-parent-class.php? – MikeWu
@burzum, подклассам часто приходится ссылаться на экземпляры родительских классов по нескольким причинам. Код, который я представил, предназначен только для иллюстративных целей. –