无法比较魔法常数__METHOD__

时间:2015-11-16 07:13:48

标签: php class magic-constants

好的,我想我在这里有一些东西......

在一个类中,我试图根据使用的方法名称调整私有函数。

所以代码看起来像:

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

如果我在同一级别的__METHOD__上执行var_dump()我试图使用它,我会得到一个不错的string(19)"my_class::my_method"。所以我将一个字符串与另一个字符串进行比较。

以下内容也将失败:

  • 将两个变量转换为字符串并进行比较。
  • __METHOD__复制到(string) $var并进行比较。
  • 将两个字符串放在上面并进行比较。
  • 使用单引号作为文本。

我可能错了,但我想我在这里遇到了一个错误:(

PHP版本5.6.1 - 赢取

2 个答案:

答案 0 :(得分:0)

你应该试试__FUNCTION__ 我猜__METHOD__将返回类名和函数名。

答案 1 :(得分: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;
    }
}