zoukankan      html  css  js  c++  java
  • php后期静态绑定

    php后期静态绑定

    自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。 虽然也可以调用非静态方法,但是不会在运行时绑定。

    static 不再只是简单的静态修饰关键字。而是可以像下面这样调用类的静态方法,非静态方法,为什么静态非静态要分开说呢,因为调用的效果是不一样的。

    1. <?php  
    2. class  A  {  
    3.     public static function  who () {  
    4.         echo  __CLASS__ ;  
    5.     }  
    6.     public static function  test () {  
    7.         static:: who ();  // 后期静态绑定从这里开始  
    8.      }  
    9. }  
    10.   
    11. class  B  extends  A  {  
    12.     public static function  who () {  
    13.         echo  __CLASS__ ;  
    14.     }  
    15. }  
    16.   
    17. B :: test ();  
    18. ?>   


    如上代码:B调用test方法,test方法调用who方法。而B类中重写了who方法,则实际调用的是B中的who方法,所以输出的__CLASS__是B  这就是说 static 调用的静态方法会在运行时自动判断调用谁的方法如果7行那里是self的话,就是调用的A的who方法)。

    而self则只会调用定义它时所在的类中的方法。这是static的一个区别于其它调用的一个新特性。而static调用非静态方法时则不会达到这种后期绑定的效果,所以叫后期静态绑定。

    这里static和self的用法很相似,只是作用区别大。

    还有就是 static只能调用静态属性。

    总结:

    综上所述,static关键字可以实现以下功能:

    1 调用类的静态方法   有后期静态绑定效果;

    2 调用类的静态属性   有后期静态绑定效果;

    3 调用类的非静态方法  没有后期静态绑定效果;

    4 强调一下 不可以调用非静态属性;

  • 相关阅读:
    python_内置函数
    python_函数进阶3
    python_函数进阶2
    微信后台的编辑模式的使用
    struts2中action的XXX_* metend={1}
    POI导出excel
    使用mybatis生成相关文件时java.sql.SQLException: Access denied for user 'root'@'localhost' (using password)
    freecms使用jsoup和quartz抓取其他网站内容
    freecms首页静态化以及模板标签 (2)
    freecms中后台添加导出excel表格功能
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8547293.html
Copyright © 2011-2022 走看看