PHP的魔术方法经常聊,可魔术常量却不是很熟悉。其实它就在你身边,你也经常用到它。
魔术常量是什么?既然称之为魔术,那必然不同凡响。魔术的精彩之处就是可以变化,代码中的魔术就是预定义。
所以魔术常量,也就是可以说成是预定义的常量。经常看喵哥文章的朋友,应该记得之前喵哥讲过常量PHP常量定义define和const有哪些区别?很容易混淆!。常量是开发者手动定义的,魔术常量其实就是扩展库已经定义好的,无需定义直接使用的常量。
如果你还记得常量的定义,自然不能忘记,它们有个特性就是定义好之后不会随意改变。如果想要修改常量十分麻烦,所以一经定义几乎不会大改。魔术常量也一样。
知道定义只好,咱们来看看都有哪些呢?
首先魔术常量的模样,类似于这样__XXX__;四个英文_分列左右两侧,中间是英文大写字符。
好,接下来就需要大家记忆一下了。
1.__LINE__:输出当前文件行数
2.__FILE__:输出文件完整文件名和完整路径
3.__DIR__:输出文件目录
可能有的朋友对__FILE__和__DIR__有点疑惑,这两个输出的差不多吧,看似类似,实际大不一样。__FILE__指令指向的是当前脚本的文件名,而__DIR__只查询文件所在的目录。这两个魔术常量会在业务逻辑中大量应用到的,比其他六个作用更多,需要熟记。
4.__FUNCTIION__:返回当前方法名
此魔术常量既然作用是返回当前方法名,那么必须得在方法中使用了,在外部是无输出的,只有在方法内部调用后,才会输出方法名。
5.__CLASS__:返回当前类名
与__FUNCTION__类似,__CLASS__返回文件类名
6.__METHOD__:返回定义类的方法名
乍一看这个功能是不是和__FUNCTION__有点像?其实他们并不一样,__FUNCTION__只返回方法名,__METHOD__既可以返回方法名,又可以返回类名和当前方法名。
7.__NAMESPACE__:输出命名空间
8.__TRAIT__:对于trait来说,它算一个PHP的关键字,PHP一直都是单继承语言,为了解决无法同时从两个基类中继承属性和方法,有了trait这一特性。
ab相当于继承了classa的值和tairtB的值。如果把traitb改回classb那么就无法同时继承类a,b。