self,parent,static详解

<?php
class Demo1
{
  public static $name = 'peter';
  protected static $salary = 3000;
  public static function show () //非静态方法可以访问静态属性
  {
    // return self::$name; //self::访问本类中的静态成员
    // return static::$name; //satic::访问调用类中的静态成员
    return static::$sex; //static::访问调用类(子类)中的静态成员,如果当前为Demo2
  //static与self和parent不同,它对应的类是动态设置的,由调用类决定,如果说self和parent
  //是静态绑定类(编译时就已确定),那么static对应的类,只有在运行时才可以确定,
  //所以又叫:延迟静态绑定,有的教程也称作:后期静态绑定
  }
}

class Demo2 extends Demo1
{
  public static $sex = 'male';
  public static function display ()
  {
    //parent::访问父类中的静态成员,static::访问调用它的类中的静态属性
    return parent::$name.'的工资是:'.parent::$salary.'性别是:'.static::$sex;
  }
}
echo '姓名是:'.Demo1::$name; //外部访问静态属性
echo '<hr>';
echo '姓名是:'.Demo2::show();//外部访问静态方法
echo '<hr>';
echo Demo2::display(); //外部访问子类中的静态方法

 

posted @ 2017-05-08 20:17  php.cn  阅读(239)  评论(0)    收藏  举报