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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 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开发中的中文编码问题
2013/08/08 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
vue中的inject学习教程
2019/04/24 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
通俗讲解python 装饰器
2020/09/07 Python
python中类与对象之间的关系详解
2020/12/16 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android