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 相关文章推荐
BBS(php & mysql)完整版(三)
Oct 09 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
phalcon框架使用指南
Feb 23 PHP
php使用正则表达式获取字符串中的URL
Dec 29 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
php可变长参数处理函数详解
Feb 22 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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&&mysql)四
2006/10/09 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
php重定向的三种方法分享
2012/02/22 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
python新手学习可变和不可变对象
2020/06/11 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
教师的实习鉴定
2013/12/15 职场文书
美容师的职业规划书
2013/12/27 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
Python Django模型详解
2021/10/05 Python
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS