«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить имя класса из расширенного класса PHP при вызове статического метода?

Как получить имя класса из расширенного класса PHP при вызове статического метода?

Опубликовано 10 ноября 2024 г.
Просматривать:167

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

Получение имени класса из расширенного статического вызова класса 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