类的静态绑定与延迟绑定技术: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();