Подтвердить что ты не робот

Можете ли вы получить имя метода из метода в PHP?

Можно ли сделать что-то вроде этого?

public function something() {
    $thisMethodName = method_get_name(); 
}

Где method_get_name() возвращает имя метода?

4b9b3361

Ответ 1

Конечно, вам нужны магические константы.

function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }

Узнайте больше из руководство по php

Ответ 2

Хотя вы можете использовать магическую константу __METHOD__ я настоятельно рекомендую проверить отражение PHP. Это поддерживается в PHP5.

$modelReflector = new ReflectionClass(__CLASS__);
$method = $modelReflector->getMethod(__METHOD__);

Затем вы можете делать такие вещи, как проверка подписи и т.д.

Ответ 3

Как подсказывает smartj, вы можете попробовать волшебную константу __METHOD__, но помните, что это вернет строку, содержащую также ваше имя класса, то есть "MyClass:: something". Использование __FUNCTION__ вместо этого вернет "что-то".

Ответ 4

Использование __FUNCTION__ - это путь вместо:

 public function something() {
     $thisMethodName = "something";
 }

который несколько пугает добавление переменной и памяти для хранения имени метода в виде строки и дублирования того, что уже существует, поэтому излишне добавляя используемые ресурсы (если вы делаете это для большой библиотеки со многими методами, это имеет большое значение).

Магические константы в PHP гарантированно не изменятся, в то время как для этого подхода потребуется применимое редактирование, если имя метода было изменено, тем самым представляя потенциал для несогласованности (обратите внимание, что я действительно сказал, что это означает, что это просто ненужное редактирование если вместо этого использовалась магическая константа).

Время и усилия, чтобы назвать переменную, введите тип метода в виде строки, назначенной этой ненужной переменной, и, конечно, правильно ссылаясь на имя переменной, которая является мотивацией для PHP, снабжающей магические константы, чтобы начать (и опровергнуть любое требование __FUNCTION__ не требуется).

Ответ 5

Hackish, но вы также можете его выкопать из возвращаемого значения debug_backtrace().

Ответ 6

С __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'
    ]);
}

И не заботится о замене имени метода внутри метода, если я хочу изменить его.

Ответ 7

Возможно, пропустить поздние привязки таким образом. Если класс B расширяет класс A: METHOD всегда возвращает часть "Class ::", относящуюся к A ("A :: methodName")

Решение: static :: class. "::". ФУНКЦИЯ

Таким образом, вы получаете ссылку на класс для текущего рабочего класса ("B :: methodName")

Ответ 8

Почему вы не можете сделать это?

public function something() {
    $thisMethodName = "something";
}