普通常量
define('常量名',常量值);
以前说过: define定义的常量 ,全局有效.无论是页面内,函数内,类内,都可以访问.
能否定义 专门在类内发挥作用的常量?
专门在类内发挥作用 说明:
- 作用域在类内,类似于静态属性
- 又是常量,则不可改.
【其实就是"不可改变的静态属性"】
类常量 在类内用 const 声明即可,前面不用加修饰符,而且权限是public的,即外部也可以访问
define('ACC','Deny');
class Human {
const HEAD = 1;
public static $leg = 2;
public static function show() {
echo ACC,'<br />';
echo self::HEAD,'<br />';
echo self::$leg,'<br />';
}
}
Human::show();
echo Human::HEAD;
魔术常量:
- 无法手动修改他的值,所以叫常量
- 但是值又是随环境变动的,所以叫魔术
魔术常量:
__FILE__ 返回当前文件的路径.
在框架开发或者是网站初始化脚本中,用来计算网站的根目录
__LINE__ 返回当前的行号
在框架中,可以用来在debug时,记录错误信息
__CLASS__ 返回当前的类名
__METHOD__ 返回当前的方法名
header("Content-type: text/html; charset=utf-8");
echo '当前正在运行的是',__FILE__,'文件','<br />';
echo '当前在',__DIR__,'目录下<br />';
echo 'hi,我在',__LINE__,'行<br />';
echo 'hello,我在',__LINE__,'行<br />';
echo 'hehe,我在',__LINE__,'行<br />';
class Human {
public static function t() {
echo '你正在运行',__CLASS__,'类<br />';
echo '下的',__METHOD__,'方法';
}
}
Human::t();
后期绑定/延迟绑定
header("Content-type: text/html; charset=utf-8");
class Human {
public static function whoami() {
echo '来自父类的whoami在执行<br />';
}
public static function say() {
self::whoami(); // 子类内没有say方法,找到了父类这里
// 在这里的self 指的是 父类
}
public static function say2() {
static::whoami(); // 子类也没有say2方法,又找到父类这里
// 但是父类用static::whoami,
// 指调用你子类自己的whoami方法
}
}
class Stu extends Human{
public static function whoami () {
echo '来自子类的whoami在执行<br />';
}
}
Stu::say();
Stu::say2();