Получение имени дочернего класса в PHP - PullRequest
1 голос
/ 12 февраля 2009

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

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

Это все с использованием PHP

Ответы [ 3 ]

10 голосов
/ 12 февраля 2009

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

10 голосов
/ 12 февраля 2009

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

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

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

0 голосов
/ 12 февраля 2009

Редактировать: Не знал о get_class, не обращайте внимания на это;)

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

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

Редактировать: Это не работает (я использовал следующий код) construct () { эхо __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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...