У меня есть несколько классов, расширенных таким образом:
class Baseresidence extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); // framework needs, can't modify } } class Site1Residence extends Baseresidence { }
и наконец
class_alias('Site1Residence', 'Residence'); // this is part of an autoloader
Итак, в конце концов, мне нравится, что эта Residence extends Site1Residence extends Baseresidence extends CActiveRecord
В Baseresidence у меня есть статическая model()
метода model()
которая извлекает экземпляр.
Теперь я могу позвонить ::
$r=Residence::model();
Проблема заключается в том, что константа __CLASS__
используется как значение по умолчанию, а на этом уровне – Baseresidence, и мне нужно имя класса верхнего уровня (созданное с псевдонимом), и это должно быть «Резиденция»,
если я сделаю:
echo get_class($r); // the Baseresidence is printed
Цель состоит в том, чтобы распечатать residence
Я не хочу ничего передавать при вызове $r=Residence::model();
Я хотел бы разрешить это на корнях.
Как получить имя класса верхнего уровня на этом уровне?
Пытаться
get_called_class();
См. http://php.net/manual/en/function.get-called-class.php
Из документов:
class foo { static public function test() { var_dump(get_called_class()); } } class bar extends foo { } foo::test(); bar::test();
Вышеприведенный пример выводит:
string(3) "foo" string(3) "bar"