普通常量
define('常量名',常量值);
以前说过: define定义的常量 ,全局有效.无论是页面内,函数内,类内,都可以访问.
能否定义 专门在类内发挥作用的常量?
专门在类内发挥作用 说明:
- 作用域在类内,类似于静态属性
- 又是常量,则不可改.
【其实就是"不可改变的静态属性"】
类常量 在类内用 const 声明即可,前面不用加修饰符,而且权限是public的,即外部也可以访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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__ 返回当前的方法名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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(); |
后期绑定/延迟绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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(); |

我的微信
把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
2016年8月5日 下午2:44 1F
static:: 调用静态方法