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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
解析MySql与Java的时间类型
Jun 22 PHP
php全角字符转换为半角函数
Feb 07 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
php利用gd库为图片添加水印
Nov 09 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
PHP PDOStatement::fetch讲解
Jan 31 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二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
vue实现分页加载效果
2019/12/24 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python编程求质数实例代码
2018/01/31 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
ASP.NET Core中的配置详解
2021/02/05 Python
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
优秀民警事迹材料
2014/01/29 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python