Невозможно сравнить магическую константу __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

2 ответа

Решение

__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;
    }
}

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

Другие вопросы по тегам