PHP的魔术常量使用最佳实践

6

PHP的魔术常量有哪些最佳实践用法,例如__LINE____FILE____FUNCTION____CLASS____METHOD__

例如,我使用__LINE____CLASS__来定位SQL错误,如下所示:

$result = mysql_query($query)
or die("Error SQL line ".__LINE__ ." class ".__CLASS__." : ".mysql_error());

这是一个可接受的做法吗?

8
您说的“最佳使用方式”是什么意思?最佳使用方式就是在需要时使用它们,不是吗? :) - Pekka
@Amirouche Douda,很高兴能帮忙。 :-D - Brad
@jasonbar和Pekka:问题已编辑。 - Amirouche Douda
我不知道,但我意识到我没有经常使用它们。谢谢你的问题! - JAL
3个回答

2
你展示的做法有两个缺点:
  • 你没有展示错误发生的文件 - 你必须有非常严格的文件结构,将类映射到文件1:1,才能使此方法有用。
  • __CLASS__会在错误发生在继承类中时显示错误结果。使用get_class($this)来获取实际当前类。
除此之外,使用这些常量是完全可以接受的。请注意:
  • __FUNCTION____CLASS__自PHP4.3版本加入。
  • __METHOD__从PHP5.0.0版本开始可用。
  • __DIR____NAMESPACE__从PHP5.3版本开始可用。
文档

2
更正:__DIR__ 是在 PHP 5.3 中添加的,而不是 5.0。 - salmatron

1

这些常量的目的是用于调试和日志记录。这正是您所做的。

__FILE__ 也可以用于相对文件路径(例如,dirname(__FILE__))。


自 PHP 5.3 版本以来,有一个名为 __DIR__ 的魔术常量,它等同于 dirname(__FILE__) - Crozin

1
我唯一能给出的建议是并非所有的魔术常量都被定义了。因此,当你怀疑时,请使用 if(defined('__MAGIC_CONSTANT__'))

2
如果您使用的是低于PHP5的版本,则某些魔术常量未定义。 - bcosca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接