seine
Новичок
Как указать имя класса, для статического метода, определенного в родителеле класса, в
Привет, не поместилось всё в названии темы, вот как хотел написать:
Как указать имя класса, для статического метода, определенного в родительском классе, вызванного через ReflectionClass?
Название такое, что б уж совсем отбить желание, кому-либо заходить в эту тему
Ну а теперь серьезно и подробно.
Есть класс Admin, который является прямым потомком класса User. Класс User вызывает статичный метод, который в процессе работы вызывает get_called_class(), вот так:
Если вызвать этот метод через класс User (т.е. вот так: User::getClassName()), то получим "User", если вызвать через класс Admin: Admin::getClassName(), то получим "Admin".
Все правильно, именно такого я и ожидаю.
Но! Если я делаю отражение класса Admin, и тогда вызываю метод getClassName(), то получаю "User"!
Вот код, который всё прояснит (мне даже кажется, что код гораздно понятней, чем объяснение словами):
В результате получим такие строчки:
Class name is Admin
Class name is Admin
Class name is User
Можно ли как-нибудь указать, что я вызываю статичный метод из класса Admin?
Привет, не поместилось всё в названии темы, вот как хотел написать:
Как указать имя класса, для статического метода, определенного в родительском классе, вызванного через ReflectionClass?
Название такое, что б уж совсем отбить желание, кому-либо заходить в эту тему

Ну а теперь серьезно и подробно.
Есть класс Admin, который является прямым потомком класса User. Класс User вызывает статичный метод, который в процессе работы вызывает get_called_class(), вот так:
PHP:
public static function getClassName() {
echo 'Class name is <b>' . get_called_class() . '</b><br />';
}
Все правильно, именно такого я и ожидаю.
Но! Если я делаю отражение класса Admin, и тогда вызываю метод getClassName(), то получаю "User"!
Вот код, который всё прояснит (мне даже кажется, что код гораздно понятней, чем объяснение словами):
PHP:
class User
{
public static function getClassName() {
echo 'Class name is <b>' . get_called_class() . '</b><br />';
}
}
class Admin extends User {}
// Вызовем напрямую
Admin::getClassName();
// Вызовем не напрямую
call_user_func(array('Admin', 'getClassName'));
// Вызовем через отражения
$rfAdmin = new ReflectionClass('Admin');
$getClassName = $rfAdmin->getMethod('getClassName');
$getClassName->invoke(null);
Class name is Admin
Class name is Admin
Class name is User
Можно ли как-нибудь указать, что я вызываю статичный метод из класса Admin?