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

  • 1,798

普通常量


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

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年8月5日14:15:34
  • 转载请务必保留本文链接:https://www.150643.com/308.html
匿名

发表评论

匿名网友 填写信息

评论:1   其中:访客  1   博主  0
    • 开拓者博主 开拓者博主

      static:: 调用静态方法