dougaxing8673 2015-11-16 07:13
浏览 49
已采纳

无法比较魔法常数__METHOD__

Ok, I think I have something here...

Inside a class, im trying to condition a private function based on the used method's name.

So the code looks something like:

<?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);

If I do a var_dump() on __METHOD__ at the same level im trying to use it I'll get a nice string(19)"my_class::my_method". So I'm comparing a string to another one.

The following will also fail:

  • Cast both vars to string and compare them.
  • Copy __METHOD__ to a (string) $var and compare them.
  • Upper both strings and compare them.
  • Using single quotes for the text.

I might be wrong but I think I hit a bug here :(

PHP Version 5.6.1 - Win

  • 写回答

2条回答 默认 最新

  • dongxia19772008 2015-11-16 07:51
    关注

    __METHOD__ returns the current class method name. In your case this is my_class::private_function.

    If you want to know the caller method, the cleanest way is to pass it as argument.

    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;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)