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中SQL注入攻击与XSS攻击
Jun 10 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
初识php MVC
Sep 10 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
codeigniter实现get分页的方法
Jul 10 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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将数据库导出成excel的方法
2010/05/07 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP中16个高危函数整理
2019/09/19 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
降低python版本的操作方法
2020/09/11 Python
python 多线程中join()的作用
2020/10/29 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
老人祝寿主持词
2014/03/28 职场文书
校庆团日活动总结
2014/08/28 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
公司证明怎么写
2014/09/22 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
二审答辩状范文
2015/05/22 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Python中requests库的用法详解
2022/06/05 Python