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中的Class的几点个人看法
Oct 09 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
php数组去重实例及分析
Nov 26 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
thinkphp分页实现效果
Oct 13 PHP
通过php动态传数据到highcharts
Apr 05 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP strripos函数用法总结
2019/02/11 PHP
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
C语言开发工程师测试题
2016/12/20 面试题
工厂实习感言
2014/01/14 职场文书
技术股份合作协议书
2014/10/05 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
太行山上观后感
2015/06/05 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
python开发飞机大战游戏
2021/07/15 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL