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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
php 字符转义 注意事项
May 27 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
从PHP的源码中深入了解stdClass类
Apr 18 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
使用laravel指定日志文件记录任意日志
Oct 17 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
解析php防止form重复提交的方法
2013/07/01 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
js控制table合并具体实现
2014/02/20 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
Python中的函数作用域
2018/05/07 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
pygame实现五子棋游戏
2019/10/29 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
python 如何上传包到pypi
2020/12/24 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
皮肤科医师岗位职责
2013/12/04 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
大学体育课感想
2015/08/10 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang