普通常量 define('常量名',常量值);
以前说过:define定义的常量,全局有效
无论是页面内,函数内,类内,都可以访问。
例:
define('ACC','Deny')
class Human{
static public function show(){
echo ACC;
}
}
Human::show(); //输出 Deny
能否定义 专门在类内发挥作用的常量
专门在类内发挥作用 说明
1.作用域在类内,类似于静态属性
2.又是常量,则不可改
其实就是“不可改变的静态属性”
类常量在类内用 const 声明即可
不用加权限修饰符,而且权限是默认public的,即外部也可以访问
类常量 静态属性 静态方法 ---》都是存放在类空间的
例:
class Human{
const HEAD=1; //声明了一个类常量
}
echo Human::HEAD; //输出 1;
注意:
这个类常量的调用方式和静态方法一样。
魔术常量
1.无法手动修改他的值,所以叫常量
2.但是值又是随环境变动的,所以叫魔术
----魔术常量
魔术常量 自己查手册看去。
__FILE__ 返回当前文件的路径
在框架开发或者是网站初始化脚本中,用来计算网站的根目录
__LINE__ 返回当前的行号
在框架中,可以用来在debug时,记录错误信息。
__DIR__ 返回当前的目录
__CLASS__ 返回当前的类名
__METHOD__ 返回当前的方法名
魔术常量直接用 echo 输出就行了
例:
echo '当前正在运行的是',__FILE__,‘文件’;
后期静态绑定 / 延迟静态绑定
指类的计算self的定义不是以定义时为准,而是以运行时的计算结果为准
例:
class Human{
static public function whoami(){
echo '来自父类的whoami在执行';
}
static public function say(){
self::whomi(); //子类内没有say方法,找到了父类这里
//在这里的self指的是 父类
}
static public function say2(){
static::whoami(); //后期静态绑定从这里开始
//子类也没有say2方法,又找到父类这里
//但是父类用 static::whoami()
//指调用你的子类自己的whoami方法
//如果子类没有whoami方法则还会调用父类的whoami方法
}
}
class Stu extends Human{
static public function whoami(){
echo '来自于子类的whoami在执行';
}
}
Stu::say(); //输出 来自父类的whoami在执行
Stu::say2(); //输出 来自于子类的whoami在执行