Можно ли сделать что-то вроде этого?
public function something() {
$thisMethodName = method_get_name();
}
Где method_get_name()
возвращает имя метода?
Можно ли сделать что-то вроде этого?
public function something() {
$thisMethodName = method_get_name();
}
Где method_get_name()
возвращает имя метода?
Конечно, вам нужны магические константы.
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
Узнайте больше из руководство по php
Хотя вы можете использовать магическую константу __METHOD__
я настоятельно рекомендую проверить отражение PHP. Это поддерживается в PHP5.
$modelReflector = new ReflectionClass(__CLASS__);
$method = $modelReflector->getMethod(__METHOD__);
Затем вы можете делать такие вещи, как проверка подписи и т.д.
Как подсказывает smartj, вы можете попробовать волшебную константу __METHOD__
, но помните, что это вернет строку, содержащую также ваше имя класса, то есть "MyClass:: something".
Использование __FUNCTION__
вместо этого вернет "что-то".
Использование __FUNCTION__
- это путь вместо:
public function something() {
$thisMethodName = "something";
}
который несколько пугает добавление переменной и памяти для хранения имени метода в виде строки и дублирования того, что уже существует, поэтому излишне добавляя используемые ресурсы (если вы делаете это для большой библиотеки со многими методами, это имеет большое значение).
Магические константы в PHP гарантированно не изменятся, в то время как для этого подхода потребуется применимое редактирование, если имя метода было изменено, тем самым представляя потенциал для несогласованности (обратите внимание, что я действительно сказал, что это означает, что это просто ненужное редактирование если вместо этого использовалась магическая константа).
Время и усилия, чтобы назвать переменную, введите тип метода в виде строки, назначенной этой ненужной переменной, и, конечно, правильно ссылаясь на имя переменной, которая является мотивацией для PHP, снабжающей магические константы, чтобы начать (и опровергнуть любое требование __FUNCTION__
не требуется).
Hackish, но вы также можете его выкопать из возвращаемого значения debug_backtrace().
С __FUNCTION__
я могу использовать это:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array
{
return array_merge(parent::{__FUNCTION__}($myParam), [
'myValue' => '123'
]);
}
вместо этого:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array
{
return array_merge(parent::getUserResponseByAccessTokenRequestOptions($myParam), [
'myValue' => '123'
]);
}
И не заботится о замене имени метода внутри метода, если я хочу изменить его.
Возможно, пропустить поздние привязки таким образом. Если класс B расширяет класс A: METHOD всегда возвращает часть "Class ::", относящуюся к A ("A :: methodName")
Решение: static :: class. "::". ФУНКЦИЯ
Таким образом, вы получаете ссылку на класс для текущего рабочего класса ("B :: methodName")
Почему вы не можете сделать это?
public function something() {
$thisMethodName = "something";
}