普通常量_魔术常量_后期绑定/延迟绑定

来源:互联网 发布:沙盘sandboxie软件 编辑:程序博客网 时间:2024/05/21 09:09

普通常量


define('常量名',常量值);

以前说过: define定义的常量 ,全局有效.无论是页面内,函数内,类内,都可以访问.

能否定义 专门在类内发挥作用的常量?

专门在类内发挥作用 说明:

  1. 作用域在类内,类似于静态属性
  2. 又是常量,则不可改.

【其实就是"不可改变的静态属性"】

类常量 在类内用 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;

魔术常量:


  1. 无法手动修改他的值,所以叫常量
  2. 但是值又是随环境变动的,所以叫魔术

魔术常量:

  __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();


1 0