Можете ли вы получить имя метода из метода в PHP? - PullRequest
62 голосов
/ 15 сентября 2009

Можно ли сделать что-то подобное?

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

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

Ответы [ 7 ]

99 голосов
/ 15 сентября 2009

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

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

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

20 голосов
/ 15 сентября 2009

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

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

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

11 голосов
/ 04 февраля 2010

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

2 голосов
/ 27 апреля 2013

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

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

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

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

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

1 голос
/ 15 сентября 2009

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

0 голосов
/ 27 октября 2018

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

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

0 голосов
/ 15 сентября 2009

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

public function something() {
    $thisMethodName = "something";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...