Допустим, я строю базовый класс, который будет расширен классом детей. Таким образом, базовый класс называется Base
а дети могут быть Child1
, Child2
и т. Д.
В конструкторе базового класса, как я могу получить значение Child1 / Child2?
Это все использует PHP
Базовый класс никогда не должен зависеть от информации о дочерних классах —
Чтобы ответить на ваш вопрос:
class base { public function __construct() { print "Class:" . get_class($this) . "\n"; } } class child extends base{ public function __construct() { parent::__construct(); } } $c = new child();
Просто для справок в будущем – это может быть достигнуто в статическом контексте с использованием get_called_class (), но это доступно только в PHP> = 5.3
просто вызовите get_class ($ this) – обратите внимание, однако, что метод базового класса не имеет реального бизнеса в изменении его поведения в зависимости от того, какой производный класс использует его. В этом весь смысл получения класса 🙂
Изменить: не знал о get_class
, не get_class
внимания на это;)
Вы можете попробовать __CLASS__
но он может не работать должным образом.
Обход может состоять в том, чтобы указать имя класса как свойство базового класса.
Изменить: это не работает (я использовал следующий код) construct () {echo __CLASS; }}
class b extends a {} $b = new b;
Я бы предложил передать имя $ b как параметр для A, например:
<?php class a { protected $name; public function __construct() { echo $this->name; } } class b extends a { protected $name = __CLASS__; } $b = new b;