速讲PHP八个魔术常量

在php中我们可以随时定义自己的常量,同时php本身也默认定义了些非常好用的常量。而又有八个预定义常量并非一成不变,而是会随着在代码位置的变化而变化,这些常量我们称为魔术常量。

废话不多说,我们直接上php官方文档的解释(图一)。若是不想看这么多文字,接下来我们用代码说话。
图一.几个php的魔术常量
图一.几个php的魔术常量
首先,我们写个方法调用这些魔术常量(图二)。我们可以先猜测输出的结果,是否和你想的一致。

图二.调用各个魔术常量
图二.调用各个魔术常量
接下来我们展示各个魔术变量的调用结果便可以一目了然的知道这些魔术变量的作用。
图三.各个魔术常量的调用结果
图三.各个魔术常量的调用结果

怎样,是否和你想的一样。是否一下就理解了这些魔术常量的作用。但是,反应快的同学一下就发现了上面只介绍了7个魔术变量,还少个__TRAIT__。别急,接下来我们便单独介绍__TRAIT__。为啥我们要把__TRAIT__单独介绍呢?因为__TRAIT__比较特殊,需要配合php关键字trait来使用。

因为php语言特性的原因,php的类继承只能继承一个类(就是我们所谓的单继承),而不能像其它编程语言一样同时继承多个类。因此trait便是为了弥补单继承而创造的。我们举个例子。
图四.出租车的例子
图四.出租车的例子

我们先写两个类,MyTaxi类和Car类。比方我拥有一辆出租车叫MyTaxi。因为MyTaxi属于车(Car),所以MyTaxi可以继承Car的属性和方法。但是MyTaxi又是一辆出租车,应该拥有出租车Taxi的方法才行啊。但是php单继承让MyTaxi不能同时继承Car类和Taxi的方法。这时我们便用trait关键字定义一个Taxi并在里面写上Taxi的方法。

这下好了,我们只需要在MyTaxi里面用use Taxi就能让MyTaxi既继承了Car类又有Taxi的方法。最后,我们运行代码并调用__TRAIT__看下结果。
图五.图四运行结果
图五.图四运行结果

由图五可知我们用trait定义了Taxi,并且是在testflod命名空间下。

最后简单说下使用trait的四个注意事项。

  1. 一般情况下,trait中只有方法,没有属性。单继承的方式更适合属性。
  2. trait不能实例化,也就是说,不能使用new的方式来让一个trait实例化。
  3. trait中的方法要想让使用trait的类使用的话,该方法必须是public。
  4. trait中可以嵌套trait。也就是说,一个trait中可以使用use的方法来嵌套另外一个trait。如果后面有类来使用这个trait的话,这个类可以获得两个trait中的所有为public的方法。

以上便是php的八个魔术常量。

PS:示例代码下载地址(http://www.echoaiyaya.club/wanshiwu/sources/detail?sourId=75)
在这里插入图片描述