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