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数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
PHP 错误处理机制
Jul 06 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
Nov 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生成随机颜色方法汇总
2014/12/03 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
详解PyTorch批训练及优化器比较
2018/04/28 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
解析Python3中的Import
2019/10/13 Python
python str字符串转uuid实例
2020/03/03 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
机械专业应届生求职信
2013/09/21 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
大学军训通讯稿
2014/01/13 职场文书
广告学专业求职信
2014/06/19 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
工程催款通知书
2015/04/17 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
java代码实现空间切割
2022/01/18 Java/Android
Nginx实现会话保持的两种方式
2022/03/18 Servers