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 extract 将数组拆分成多个变量的函数
Jun 30 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
PHP连接access数据库
Mar 27 PHP
PHP中使用BigMap实例
Mar 30 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP实现批量修改文件名的方法示例
Sep 18 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/04/26 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
如何基于python实现归一化处理
2020/01/20 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
自荐书封面下载
2013/11/29 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
二手房购房意向书
2015/05/09 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
浅谈redis整数集为什么不能降级
2021/07/25 Redis