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中上传大体积文件时需要的设置
Oct 09 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
PHP children()函数讲解
Feb 03 PHP
PHP设计模式之单例模式定义与用法分析
Mar 26 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
php适配器模式简单应用示例
Oct 23 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中几个常用的魔术常量
2012/02/23 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
js快速排序的实现代码
2013/12/08 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
美国性感女装网站:bebe
2017/03/04 全球购物
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
二年级语文教学反思
2014/02/02 职场文书
军训学生自我鉴定
2014/02/12 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
防汛工作情况汇报
2014/10/28 职场文书
租赁协议书
2015/01/27 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
清洁工个人工作总结
2015/03/05 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB