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中文字母数字验证码实现代码
Apr 25 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
php 查找数组元素提高效率的方法详解
May 05 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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
使用php4加速网络传输
2006/10/09 PHP
PHP 图片上传代码
2011/09/13 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
抽样调查项目计划书
2014/04/24 职场文书
天气温馨提示语
2015/07/14 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
Python中使用ipython的详细教程
2021/06/22 Python