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


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

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

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

6 53

6 ответов:

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

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 ().

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

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