类的静态绑定与延迟绑定技术:self,parent,static详解

<?php
//
class Demo1{
  public static $name = 'peter';
  public static $salary = 3000;

  public static function show(){
    //self::是与Demo类静态绑定
    //return self::$name; //访问本类中的静态属性self::就是当前类
    return static::$name; //访问本类中的静态属性static::就是当前类
    //return static::$sex; //这里用Demo1::show()会出错,可以用调用Demo2::show();
    //static与self,parent是不一样的,它对应的类是动态设置的,由调用类决定,如果self
    //parent是静态绑定到类的话,static就是动态绑定到类,也叫静态延迟绑定
  }
}

class Demo2 extends Demo1{
  public static $sex = 'male';

  public static function display(){
    //parent::与父类进行静态绑定,self::与Demo2类静态绑定
    //return parent::$name.'的工资是:'.parent::$salary.' 性别是:'.self::$sex;
    //parent::与父类进行静态绑定,static::与Demo2类静态绑定
    return parent::$name.'的工资是:'.parent::$salary.' 性别是:'.static::$sex;
  }
}


echo '姓名是:'.Demo1::$name; //在外部访问类中的静态属性
echo '<hr>';
echo '姓名是:'.Demo1::show(); //在外部访问类中的静态方法
echo '<hr>';
echo Demo2::display();

posted @ 2018-11-09 14:55  LBY001  阅读(211)  评论(0编辑  收藏  举报