0

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

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

所以代码看起来像:

<?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__到 a(string) $var并比较它们。
  • 将两个字符串都放在上面并比较它们。
  • 对文本使用单引号。

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

PHP 版本 5.6.1 - 赢

4

2 回答 2

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;
    }
}
于 2015-11-16T07:51:30.027 回答
0

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

于 2015-11-16T07:20:40.733 回答