【问题标题】:Get current class and method?获取当前的类和方法?
【发布时间】:2011-01-09 13:30:46
【问题描述】:

我正在创建一个日志函数,它将我的错误记录在一个文件中。

我认为它会包含错误发生在哪个类和方法中。

有没有办法记录错误发生在哪个类和方法中,这样我就不必每次都手动输入?

【问题讨论】:

  • 您可能希望提供有关您的记录器类以及您打算如何调用它的更多信息。

标签: php


【解决方案1】:

我对 PHP 不是很了解,但我相信它具有类似于 C/C++ 的“神奇常量”。看看here:这似乎表明你可以使用

__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__

【讨论】:

【解决方案2】:

如果您在父/基类中,__CLASS__ 将返回不需要的父/基类名称。在这种情况下,您可以使用get_class()

get_class($this)

【讨论】:

  • 即使您在父类中定义的方法中,这也会获取子类。
【解决方案3】:

在当前的 PHP 版本 (5.5+) 中,您应该使用 static::class

它适用于静态方法和实例方法,并返回实际的类名,即使方法体是在超类中定义的。

【讨论】:

  • 在 PHP 7.1 中,如果方法体是在超类中定义的 static::class 返回超类名称
  • @g4b0 不,它没有。我刚刚用 PHP 7.1.8 测试了这个脚本:class A { function f() {return static::class;} } class B extends A {} $b = new B; echo $b->f();,它正确打印了 B,即使方法是在 A 中定义的。
  • 别忘了selfstatic 之间的区别。 static 将引用它被调用的类,而 self 是它被创建的类。
【解决方案4】:

在 PHP5 中使用 __METHOD__ 常量

【讨论】:

    【解决方案5】:

    get_called_class() 获取当前类。这也可能很有趣:debug_print_backtrace()

    【讨论】:

    • 你说得对,我忘记了上下文,因为我明天才用它。但无论如何可能很有趣?
    【解决方案6】:

    在 Laravel 5 中 CLASS 是返回命名空间和类名,所以它是一个大字符串。 这就是你如何在没有其他东西的情况下获得当前课程

    echo (new \ReflectionClass($this))->getShortName();
    

    【讨论】:

    • 这是slowest methods 之一,您可以使用它来提取类短名称。
    【解决方案7】:

    PHP 8.0 开始,如果变量是对象,则有了新的方法:

    $object::class
    
    $this::class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2016-03-13
      • 1970-01-01
      • 2013-04-13
      • 2019-01-07
      相关资源
      最近更新 更多