- self::与当前类静态绑定
- parent::与父类进行静态绑定
- static::与调用类进行绑定
- static与self,parent是不一样的,它对应的类是动态设置的,由调用类决定,如果说self和parent是静态绑定到类的话,static就是动态绑定到类,叫做:静态延迟绑定(后期静态绑定)
- 静态绑定(self/parsent)它们与类的绑定是在代码的编译阶段进行,而static与类的绑定是在代码运行时才进行绑定,所以叫做:静态延迟绑定(与类绑定的时机不同)
<?php
class Demo1{
public static $name = 'peter';
public static $salary = 3000;
public static function show(){
//self::与Demo1类静态绑定
// return self::$name;//访问本类中的静态属性self::就是当前类
return static::$name;//访问本类中的静态属性static::就是当前类
//通过static来实现通过父类访问字类的属性
// return static::$sex; //和echo Demo2::show()配合使用
// static与self,parent是不一样的,它对应的类是动态设置的,由调用类决定,如果说self和parent是静态绑定到类的话,static就是动态绑定到类,叫做:静态延迟绑定(后期静态绑定)
// 静态绑定(self/parsent)它们与类的绑定是在代码的编译阶段进行,而static与类的绑定是在代码运行时才进行绑定,所以叫做:静态延迟绑定(与类绑定的时机不同)
}
}
class Demo2 extends Demo1
{
public static $sex = 'male';
public static function display(){
//parent::与父类进行静态绑定 self::与Demo2类进行静态绑定
//return parent::$name.'的工资是:'.parent::$salary.'性别是'.self::$sex;
//static::与Demo2类静态绑定
return parent::$name.'的工资是:'.parent::$salary.'性别是'.static::$sex;
}
}
echo '姓名是:'.Demo1::$name;//在外部访问类中的静态属性
echo '<hr>';
echo '姓名是:'.Demo1::show();//在外部访问类中的静态属性
echo '<hr>';
echo Demo2::display();
// echo Demo2::show();//通过子类调用父类方法来调用子类的静态属性
?>