PHP中怎么理解self parent static 什么叫静态延时绑定~

首先看代码:

class Demo1{
    public static $name = 'zsgz';
    public  static $salary = 3000;
    public static function show(){
        //self与demo1类静态绑定
         return self::$name;//访问本类中的静态属性self::就是当前类
       // return static::$name;//访问本类中的静态属性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 '
'; echo '姓名是:'.Demo1::show();//在外部访问类中的静态属性 echo '
'; echo Demo2::display(); echo '
';

上面代码的Demo1的show()和Demo2中的display()的方法return返回值输出结果都是一样的.


PHP中怎么理解self parent static 什么叫静态延时绑定~_第1张图片
image.png

下面我们看这种情况,怎么在Demo1中访问Demo2的$sex属性呢?

class Demo1{
    public static $name = 'zsgz';
    public  static $salary = 3000;
    public static function show(){
        return static::$sex;//访问本类中的静态属性static::就是当前类
        //static与self,parent是不一样的,它对应的类是动态设置的,有调用类决定,如果说self和parent是静态绑定到类的话,
        //static就是动态绑定到类,叫做静态延迟绑定(后期静态绑定)
        //静态绑定(self和parent)他们与类的绑定是在代码编译阶段进行,而static与类的绑定是在代码运行时才进行绑定,
        //所以叫静态延时绑定,所以叫:静态延迟绑定(与类绑定的时机不同)
    }

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

输出结果:
image.png

总结:static与self,parent是不一样的,它对应的类是动态设置的,有调用类决定,如果说self和parent是静态绑定到类的话,static就是动态绑定到类,叫做静态延迟绑定(后期静态绑定)
静态绑定(self和parent)他们与类的绑定是在代码编译阶段进行,而static与类的绑定是在代码运行时才进行绑定,所以叫静态延时绑定,所以叫:静态延迟绑定(与类绑定的时机不同)

学习视频:http://www.php.cn/code/15745.html

你可能感兴趣的:(PHP中怎么理解self parent static 什么叫静态延时绑定~)