PHP面向对象之后期静态绑定功能介绍


Posted in PHP onMay 18, 2015

本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类

首先来看下面这个例子:

class Person

{

 

    public static function status()

    {

        self::getStatus();

    }

 

    protected static function getStatus()

    {

        echo "Person is alive";

    }

 

}

 

class Deceased extends Person

{

 

    protected static function getStatus()

    {

        echo "Person is deceased";

    }

 

}

 

Deceased::status(); //Person is alive

很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,更好的解决方案是PHP 5.3后添加了后期静态绑定的功能。

class Person

{

 

    public static function status()

    {

        static::getStatus();

    }

 

    protected static function getStatus()

    {

        echo "Person is alive";

    }

 

}

 

class Deceased extends Person

{

 

    protected static function getStatus()

    {

        echo "Person is deceased";

    }

 

}

 

Deceased::status(); //Person is deceased

可见,static::不在指向当前所在的类,实际上,它是在运行中计算的,强制获取最终类的所有属性。

因此,建议,以后不要再使用self::,使用static::

PHP 相关文章推荐
PHP中的串行化变量和序列化对象
Sep 05 PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
谈谈新手如何学习PHP
Dec 23 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
php处理json格式数据经典案例总结
May 19 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
PHP学习笔记之session
May 06 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
php中关于socket的系列函数总结
May 18 #PHP
php简单socket服务器客户端代码实例
May 18 #PHP
php实现粘贴截图并完成上传功能
May 17 #PHP
php获取json数据所有的节点路径
May 17 #PHP
php中memcache 基本操作实例
May 17 #PHP
PHP实现过滤各种HTML标签
May 17 #PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 #PHP
You might like
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
经验几则 推荐
2006/09/05 Javascript
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python读取word文本操作详解
2018/01/22 Python
python将回车作为输入内容的实例
2018/06/23 Python
python使用udp实现聊天器功能
2018/12/10 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
护士专业推荐信
2013/11/02 职场文书
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
2015年党员承诺书
2015/01/21 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android