Получение имени класса из расширенного статического вызова класса PHP
В объектно-ориентированном программировании классы часто расширяют базовые классы, чтобы наследовать и расширять их функциональность . Распространенный сценарий предполагает необходимость получить имя класса из вызова статического метода в расширенном классе, несмотря на то, что CLASS всегда возвращает имя определяющего класса.
Проблема: недоступность имени класса в родительских статических методах
Рассмотрим сценарий с двумя классами: Action и MyAction, где MyAction расширяет Действие. Action определяет статический метод, n(), который недоступен через константу CLASS в родительских статических методах, в результате чего получается CLASS значение устанавливается в «Действие» независимо от вызывающего класса.
Решения:
1. Поздние статические привязки (PHP 5.3):
Поздние статические привязки позволяют определить целевой класс вызова статического метода во время выполнения, а не при определении метода. Это достигается с помощью функции get_known_class(), которая возвращает имя класса, в котором был вызван статический метод.
Например:
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
2. Использование get_class($this) (только нестатические методы):
Если рассматриваемый метод не является статическим, вы можете использовать get_class($this) для получения класса имя, из которого был вызван метод.
Например:
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
Вывод:
Оба поздних статических привязки и get_class($this) предлагают решения для получения имени класса из вызова статического метода в расширенный класс. Поздние статические привязки предпочтительнее для статических методов, а get_class($this) — для нестатических методов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3