Невозможно сравнить магическую константу __METHOD__

Хорошо, я думаю, что у меня есть кое-что здесь …

Внутри класса я пытаюсь обусловить приватную функцию на основе имени используемого метода.

Так что код выглядит примерно так:

<?php
class my_class{

public function my_method($arg1) {
$this->private_function($arg1);
}

private function private_function($arg2){
if (__METHOD__ == "my_class::my_method"){
#THIS FAILS
}else{
#THIS WORKS
}
return;
}
}

(new my_class())->my_method($something);

Если я сделаю var_dump () на __METHOD__ на том же уровне я пытаюсь использовать его, я получу хороший string(19)"my_class::my_method", Поэтому я сравниваю строку с другой.

Следующее также потерпит неудачу:

  • Приведите обе переменные в строку и сравните их.
  • копия __METHOD__ к (string) $var и сравни их.
  • Опустите обе строки и сравните их.
  • Использование одинарных кавычек для текста.

Я могу ошибаться, но я думаю, что я попал в ошибку здесь 🙁

Версия PHP 5.6.1 — Win

0

Решение

__METHOD__ возвращает имя метода текущего класса. В вашем случае это my_class::private_function,

Если вы хотите знать метод вызывающей стороны, самый простой способ — передать его в качестве аргумента.

class my_class {

public function my_method($arg1) {
$this->private_function($arg1, __METHOD__);
}

private function private_function($arg2, $caller) {
if ($caller == "my_class::my_method") {

} else {

}
return;
}
}
0

Другие решения

Вы должны попробовать __FUNCTION__
Похоже __METHOD__ вернет имя класса вместе с именем функции.

0

По вопросам рекламы [email protected]