zoukankan      html  css  js  c++  java
  • PHP延迟静态绑定

    php5.3已经开始支持延迟静态绑定。

    延迟静态绑定指的是在父类中获取子类的最终状态。在父类中,如果出现self关键字,被子类继承后,这个self值的还是父类而不是子类。

    如果在父类中出现了self关键字,并且子类继承了含有self的这段代码,那么需要考虑静态延迟绑定。在父类中使用static代替self.

    说到底,self到底表示什么?self用在类中,引用自身的静态成员变量,表示的就是类名,完全可以被类名替换掉。被子类继承之后,self还是表示的父类名,而不是子类self了

    如下例:

    <?php 
    class A{
    	public static $a=1;
    	public function test(){
    		echo self::$a;//自身的属性a
    	}
    }
    
    class B extends A{
    	public static $a = 2;
    }
    
    $m = new B();
    $m->test();//最终输出了1,也就是父类的属性a
    
    ?>
    

      要想在父类中test方法中实现取到子类本身的属性a,需要用static代替self

    <?php 
    class A{
    	public static $a=1;
    	public function test(){
    		//echo self::$a;
    		echo static::$a;//延迟静态绑定,绑定到子类
    	}
    }
    
    class B extends A{
    	public static $a = 2;
    }
    
    $m = new B();
    $m->test();//输出子类中的2
    
    ?>
    

      self用在类中,引用自身的静态成员变量,它就是表示类名,完全可以用类名替换掉。所以继承之后self还是父类的类名,而不是子类的类名。延迟静态绑定用static来表示最终类。

  • 相关阅读:
    原理Lambda表达式
    关于Web.config的debug和release.config文件
    利用GeoIP数据库及API进行地理定位查询 Java
    JSONP跨域的原理解析
    如何处理JSON中的特殊字符
    IIS下防止mdb数据库被下载的实现方法
    点击文字选中radio
    关于微信40029错误
    nopcommerce的WidgetZones
    js判断移动终端(手机浏览器)
  • 原文地址:https://www.cnblogs.com/taijun/p/4214986.html
Copyright © 2011-2022 走看看