10 (重点)类的静态绑定与延迟绑定技术self,parent,static详解

self_parent_static.php

<?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::就是当前类
        return static::$sex;//访问本类中的静态属性static::就是当前类

        //static与self,parent是不一样的,它对应的是动态设置的,由调用类决定,
        //如果说self和parent是静态绑定到类的话,static就是动态绑定到类,书上叫做:静态延迟绑定(后期静态绑定)
        //静态绑定(self和parent)他们与类的绑定是在代码的编译阶段进行;而static与类的绑定是在代码的运行时才进行绑定,所以叫:静态延迟绑定(与类绑定的时机不同)
        //(当代码运行到这里时)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 '性别是:'.Demo2::show();//性别是:male     //在外部访问类中的静态属性
echo '<hr>';
echo Demo2::display();
  • 效果图


    image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容