首先我们来看下,self和static的区别:

class A

{

public static  $num = 1;

public static function show(){

echo self::$num;

echo '
';

echo static::$num;

}

}

A::show();

输出结果:

1

1

我们再来看:

class A

{

public static  $num = 1;

public static function show(){

echo self::$num;

echo '
';

echo static::$num;

}

}

class B extends A

{

public static $num = 2;

}

B::show();

输出结果:

1

2

可以看出: 当子类覆盖父类的静态属性时,self 输出依然是父类的静态属性值,而static 输出的则是子类的静态属性值。

那么,当子类继承父类时,就不用在重复实现getInstance(),而是将父类的static::$instance绑定为子类,这就是PHP延时静态绑定。

实现方式:

class A

{

private static $instance = [];

/**

* @return static

*/

public static function getInstance()

{

$class = get_called_class();

if(!isset(self::$instance[$class]) || !self::$instance[$class] instanceof $class){

self::$instance[$class] = new static();

}

return self::$instance[$class];

}

}

private static PHP,PHP延时静态绑定以及self 和 static 的区别 | 剑花烟雨江南相关推荐

  1. java中的static类_再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  2. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

  3. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  4. java里面的static静态问题————Cannot use this in a static context

    错误提示意思:this不能用在这串代码内. public static void main(String args[]){int a=10;int sum;sum=this.a+a;System.ou ...

  5. C语言中的 static变量(全局和局部)、static函数总结

    简介: C语言中的 static变量(全局和局部).static函数总结 文章目录 本博文的简述or解决问题? 同步博文: static 变量: 静态局部变量: 静态全局变量: static 函数-. ...

  6. 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)

    1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...

  7. java static 变量 初始化一次_关于java static变量初始化的疑问

    java中,类的static变量作为类变量,只需要被一次初始化,就可使用,但是,我在程序中遇到一个问题: 在web.xml中配置listener,服务器启动时,ServletContextListen ...

  8. php new static,PHP面向对象中new self( )和 new static( ) 的区别

    首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. 接下来通过一个例子来证明上面的结果 class A { public static $_a = ...

  9. java中static和this_理解Java中this和static的含义

    //this:当前对象的引用 //在引用一个类的成员变量,this被编译器隐含传递过去 //this的用法 //返回当前对象的引用 //从一个构造函数中调用另外一个构造函数 //区分同名的成员变量和参 ...

最新文章

  1. Vijos P1848 记数问题【进制】
  2. 一天1个机器学习知识点(二)
  3. mysql远程访问显示警告信息_mysql远程访问的时候遇到了各种问题
  4. 不会部署并调试SpringBoot源码?一看必会IDEA操作
  5. android window设置动画,android - 具有动画的Windowmanager
  6. kotlin编译失败_关于应用Kotlin后的编译速度问题
  7. 一道笔试题的解法和联想
  8. 数据库专家:MySQL分片水很深
  9. 【通讯录】Excel通讯录导入手机详细教程
  10. 德勤:制造业企业数字化转型方案(PPT)
  11. C语言模拟实现虚拟存储管理(请求分页存储管理)
  12. opqcp c语言代码混淆器 error
  13. workman安装以及使用
  14. Linux入门怎么学?262页linux学习笔记,零基础也能轻松入门
  15. 支持电力国网I1协议的4G低功耗摄像头解决方案
  16. C语言入门:计算总成绩和平均成绩
  17. 卡尔曼滤波器之经典卡尔曼滤波
  18. 帝国cms支付系统的漏单风险
  19. [编译原理]吉林大学编译原理csf课件下载(1-64) 主讲:康辉 (附破解补丁)
  20. Python处理大学英语四级考试数据(Excel文件)案例一则

热门文章

  1. 黑苹果CLOVER引导去除多余引导项Windows10+MacOS+DeepinLinux+FydeOS+MintLinux+ManjaroLinux
  2. 总结:linux驱动之I2C至少四种读写方法
  3. 2019CSUST选拔赛
  4. linux 16.04系统下载,Ubuntu MATE 16.04 LTS 发布下载
  5. Linux centos关闭防火墙
  6. 灵魂战车2 复仇之魂
  7. Mockito的@Mock与@MockBean
  8. html2canvas手机黑屏,华为手机使用canvas.getContext('2d')真机黑屏
  9. hrbust 2189 节点连接
  10. 献给朋友们的一本书--《31天成为IT服务达人》