2009-02-11 3 views
1

Позволяет сказать, что я создаю базовый класс, который будет расширен классом children. Таким образом, базовый класс называется Base и дети могут быть Child1, Child2 и т.д.Получение имени дочернего класса в PHP

В конструкторе базового класса, как я могу получить значение Child1/ребенка2?

Это все с помощью PHP

ответ

10

Базовый класс не должен действительно никогда не зависит от информации о дочерних классах ---

Чтобы ответить на ваш вопрос:

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

+1

Я знаю, что это немного устарело, но я подумал, что я буду упоминать, что он работает для меня в php 5.2.17. – Trey

+0

«Базовый класс должен никогда не зависеть от информации о дочерних классах» - как насчет абстрактных классов. Это может быть полезно в некоторых случаях, когда вам нужно направлять вещи вокруг. – TCB13

0

Edit: Не знаю, о get_class, игнорировать этот один;)

Вы можете попробовать __CLASS__ но он не может работать должным образом.

Обходным может быть указание имени класса как свойства базового класса.

Edit: Это не работает (я использовал следующий код) конструкт() { эхо __CLASS; } }

class b extends a {} 

$b = new b; 

Я хотел бы предложить передавая имя $ Ь в качестве параметра А, например:

<?php 
class a { 
    protected $name; 
    public function __construct() { 
     echo $this->name; 
    } 
} 

class b extends a { 
    protected $name = __CLASS__; 
} 

$b = new b; 
10

просто позвоните get_class ($ это) - обратите внимание, однако, что базовый класс метод не имеет реального бизнеса в изменении своего поведения в зависимости от того, какой производный класс использует его. Вот вся суть получения класса :)

+1

Если вы попытаетесь реализовать очень простую структуру MVC, то с ИМЯ дочернего класса, чтобы найти представление, очень полезно. – sinni800

Смежные вопросы