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中一个控制字符串输出的函数
Oct 09 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
PHP安全性漫谈
Jun 28 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
PHP中echo与print区别点整理
Mar 09 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
Terran历史背景
2020/03/14 星际争霸
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
JS中style属性
2006/10/11 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
js中document.write的那点事
2014/12/12 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Python实现子类调用父类的方法
2014/11/10 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python+logging+yaml实现日志分割
2019/07/22 Python
python实现车牌识别的示例代码
2019/08/05 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
最小二乘法及其python实现详解
2020/02/24 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
python实现扫雷游戏的示例
2020/10/20 Python
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
有兼职工作经历的简历自我评价
2014/03/07 职场文书
新闻报道策划方案
2014/06/11 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Python语言内置数据类型
2022/02/24 Python