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 相关文章推荐
深入了解php4(2)--重访过去
Oct 09 PHP
我的论坛源代码(二)
Oct 09 PHP
php eval函数用法总结
Oct 31 PHP
php5.3 注意事项说明
Jul 01 PHP
php防止SQL注入详解及防范
Nov 12 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php实现mysql封装类示例
May 07 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP SplObjectStorage使用实例
May 12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
php生成微信红包数组的方法
Sep 05 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
初识laravel5
2015/03/02 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
异步加载script的代码
2011/01/12 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python线性方程组求解运算示例
2018/01/17 Python
python 中字典嵌套列表的方法
2018/07/03 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
就业推荐表自我鉴定
2013/10/29 职场文书
社区先进事迹材料
2014/05/19 职场文书
2014年城管工作总结
2014/11/20 职场文书
2019新员工心得体会
2019/06/25 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python