【发布时间】:2011-01-09 13:30:46
【问题描述】:
我正在创建一个日志函数,它将我的错误记录在一个文件中。
我认为它会包含错误发生在哪个类和方法中。
有没有办法记录错误发生在哪个类和方法中,这样我就不必每次都手动输入?
【问题讨论】:
-
您可能希望提供有关您的记录器类以及您打算如何调用它的更多信息。
标签: php
我正在创建一个日志函数,它将我的错误记录在一个文件中。
我认为它会包含错误发生在哪个类和方法中。
有没有办法记录错误发生在哪个类和方法中,这样我就不必每次都手动输入?
【问题讨论】:
标签: php
我对 PHP 不是很了解,但我相信它具有类似于 C/C++ 的“神奇常量”。看看here:这似乎表明你可以使用
__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__
【讨论】:
如果您在父/基类中,__CLASS__ 将返回不需要的父/基类名称。在这种情况下,您可以使用get_class():
get_class($this)
【讨论】:
在当前的 PHP 版本 (5.5+) 中,您应该使用 static::class
它适用于静态方法和实例方法,并返回实际的类名,即使方法体是在超类中定义的。
【讨论】:
class A { function f() {return static::class;} } class B extends A {} $b = new B; echo $b->f();,它正确打印了 B,即使方法是在 A 中定义的。
self 和static 之间的区别。 static 将引用它被调用的类,而 self 是它被创建的类。
在 PHP5 中使用 __METHOD__ 常量
【讨论】:
get_called_class() 获取当前类。这也可能很有趣:debug_print_backtrace()。
【讨论】:
在 Laravel 5 中 CLASS 是返回命名空间和类名,所以它是一个大字符串。 这就是你如何在没有其他东西的情况下获得当前课程:
echo (new \ReflectionClass($this))->getShortName();
【讨论】:
从 PHP 8.0 开始,如果变量是对象,则有了新的方法:
$object::class
$this::class
【讨论】: