// =笔记部分1=
/*
普通常量 define(‘常量名’,‘常量值’);
以前说过: define定义的常量,全局有效.
无论是页面内,函数内,类内,都可以访问.
专门在类内发挥作用
1、作用域在类内,类似于静态属性.
2、又是常量,则不可改.
其实就是“不可改变的静态属性”
类常量 在类内用 const 声明即可
前面不用加修饰符,
而且权限是public,即外部也可以访问.
*/
// =代码部分1=
// =用const声明类常量= //
define('ACC','Deny'); //Deny
class Human {
const HEAD = 1;
public static $leg = 2;
public static function show() {
echo ACC,'<br >';
echo self::HEAD,'<br >'; //1
echo self::$leg,'<br >'; //2
}
}
Human::show();
echo Human::HEAD; //1
// =笔记部分2=
/*
魔术常量的定义
1、无法手动修改他的值,所以叫常量
2、但是值是随环境变动的,所以叫魔术
*/
/*
魔术常量的类型
__FILE__ 返回当前文件的路径
在框架开发或者是网站初始化脚本中,用来计算网站的根目录.
__LINE__ 返回当前的行号
在框架中,可以用来在DEBUG中,记录错误信息
__DIR__ 返回当前文件所在目录
__CLASS__ 返回当前的类名
__METHOD__ 返回当前的方法名
*/
// =代码部分2=
// =魔术常量的例子= //
echo '当前正在运行的是',__FILE__,'文件','<br >';
echo '当前在',__DIR__,'目录下<br >';
echo 'hi,我在',__LINE__,'行<br >';
echo 'hi,我在',__LINE__,'行<br >';
echo 'hi,我在',__LINE__,'行<br >';
class Human2 {
public static function t() {
echo '你正在运行',__CLASS__,'类<br >';
echo '下的',__METHOD__,'方法<br >';
}
}
Human2::t();
// =代码部分3=
// =延期绑定= //
class Human3 {
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 Human3 {
public static function whoami () {
echo '来自子类的whoami在执行<br >';
}
}
Stu::say(); // 来自父类的whoami在执行
Stu::say2(); // 来自子类的whoami在执行