• PHP面向对象——类常量,魔术常量与延期绑定


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

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

    例:
    define('ACC','Deny')

       class Human{

        static public function show(){
          
            echo ACC;
         }
    }

    Human::show();     //输出    Deny


    能否定义 专门在类内发挥作用的常量
    专门在类内发挥作用  说明
    1.作用域在类内,类似于静态属性
    2.又是常量,则不可改

    其实就是“不可改变的静态属性”
    类常量在类内用 const 声明即可
    不用加权限修饰符,而且权限是默认public的,即外部也可以访问

    类常量 静态属性 静态方法  ---》都是存放在类空间的


    例:

     class Human{
         const HEAD=1;        //声明了一个类常量
    }


    echo Human::HEAD;        //输出   1;

    注意:
      这个类常量的调用方式和静态方法一样。




    魔术常量

    1.无法手动修改他的值,所以叫常量

    2.但是值又是随环境变动的,所以叫魔术


    ----魔术常量


    魔术常量        自己查手册看去。

    __FILE__ 返回当前文件的路径

    在框架开发或者是网站初始化脚本中,用来计算网站的根目录

    __LINE__ 返回当前的行号

    在框架中,可以用来在debug时,记录错误信息。

    __DIR__ 返回当前的目录

    __CLASS__  返回当前的类名

    __METHOD__ 返回当前的方法名




    魔术常量直接用 echo 输出就行了

    例:
    echo '当前正在运行的是',__FILE__,‘文件’;



    后期静态绑定  /   延迟静态绑定


    指类的计算self的定义不是以定义时为准,而是以运行时的计算结果为准


    例:

      class Human{

        static public function whoami(){

           echo '来自父类的whoami在执行';
        }

        static public function say(){

             self::whomi();      //子类内没有say方法,找到了父类这里
                                  //在这里的self指的是 父类
         }

    static public function say2(){

              static::whoami();   //后期静态绑定从这里开始
                                  //子类也没有say2方法,又找到父类这里   
                                  //但是父类用 static::whoami()
                                  //指调用你的子类自己的whoami方法  
                                  //如果子类没有whoami方法则还会调用父类的whoami方法
         }

    }

       class Stu extends Human{

         static public function whoami(){

            echo '来自于子类的whoami在执行';
         }
    }


    Stu::say();     //输出     来自父类的whoami在执行

    Stu::say2();    //输出     来自于子类的whoami在执行

  • 相关阅读:
    【散列表】拉链法以及线性探查法
    【Spring】第一个hello world程序
    『Java基础』基本数据类型和包装类
    二进制、八进制、十进制、十六进制互转
    [MyBatis]缓存机制
    Ora-01830 日期格式图片在转换整个输入字符串之前结束
    leetcode1584. 连接所有点的最小费用(最小生成树算法的应用)
    VS安装SVN插件
    Winform打开不窗体设计器解决方法(Winform以普通C#类显示,打开不了设计器)
    Oracle修改System密码并解锁
  • 原文地址:https://www.cnblogs.com/suiyuewuxin/p/5608477.html
Copyright © 2020-2023  润新知