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 array_search() 函数使用
Apr 13 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
php验证码的制作思路和实现方法
Nov 12 PHP
CI配置多数据库访问的方法
Mar 28 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 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正确配置mysql(apache环境)
2011/08/28 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
js文件缓存之版本管理详解
2013/07/05 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
python实现统计代码行数的方法
2015/05/22 Python
python删除过期文件的方法
2015/05/29 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
高山背包:High Sierra
2017/11/23 全球购物
学生喝酒检讨书
2014/02/06 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
企业出纳岗位职责
2014/03/12 职场文书
商务经理岗位职责
2014/08/03 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
小学重阳节活动总结
2015/03/24 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis