Теперь, когда PHP 5.3 широко доступен в дикой природе, я хотел собрать краткий ответ на этот вопрос, чтобы отразить новые доступные методы.
Как упоминалось в других ответах, в PHP 5.3 введено Позднее статическое связывание через новое ключевое слово static
. Также доступна новая функция get_called_class()
, которую можно использовать только в методе класса (экземпляре или статическом).
Для определения класса, как было задано в этом вопросе, подходит функция get_called_class()
:
<?php
abstract class ParentClass {
public static function whoAmI () {
return get_called_class();
}
}
class ChildClass1 extends ParentClass {
}
class ChildClass2 extends ParentClass {
}
// Shows 'ChildClass1'
print ChildClass1::whoAmI();
print "\n";
// Shows 'ChildClass2'
print ChildClass2::whoAmI();
print "\n";
Пользовательские примечания для get_called_class()
включают несколько примеров реализаций, которые также должны работать в PHP 5.2 с использованием debug_backtrace()
.