PHP后期静态绑定实例浅析


Posted in PHP onDecember 21, 2018

本文实例讲述了PHP后期静态绑定。分享给大家供大家参考,具体如下:

从php5.3开始,php增加了一个叫后期绑定的功能,用于在继承范围内引用静态调用的类

该功能从语言内部角度考虑北命名为“后期静态绑定”;“后期绑定”意思说:static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的,也可以成为“静态绑定”;因为他可以用于(但不限于静态方法的调用)。

self::的限制

使用self::或者_class_对当前类的静态引用,取决于定义当前方法所在的类

例子:

class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    self::who();
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
B::test(); //A

打印结果:

A

后期静态绑定的用法

后期静态绑定试图通过引入一个关键字表示运行时最初调用的类来绕过限制。简单的说,这个关键字能够让你在上述中调用test()时引用的类是B而不是A。最终决定不引用新的关键字,而是使用已经预留static关键字

例子:

<?php
class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    static::who(); // 后期静态绑定从这里开始
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
B::test();
?>

打印结果是:

B

后期静态绑定的处理方式解决了以往完全没有解决的静态调用,另外一方面,如果静态调用使用parent::或者self::将转发调用信息

<?php
class A {
  public static function foo() {
    static::who();
  }
  public static function who() {
    echo __CLASS__."\n";
  }
}
class B extends A {
  public static function test() {
    A::foo();
    parent::foo();
    self::foo();
  }
  public static function who() {
    echo __CLASS__."\n";
  }
}
class C extends B {
  public static function who() {
    echo __CLASS__."\n";
  }
}
C::test();
?>

打印结果:

A
C
C

例子:

<?php
class a {
 static public function test() {
  print get_called_class();
 }
}
class b extends a {
}
a::test();
b::test();
?>

打印结果:

a
b

特别声明:

get_called_class();获得类的名称静态方法中调用

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何正确理解PHP的错误信息
Oct 09 PHP
PHP Pear 安装及使用
Mar 19 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
dedecms集成财付通支付接口
Dec 28 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
php header函数的常用http头设置
Jun 25 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 #PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 #PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 #PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 #PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 #PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 #PHP
PHP自定义错误处理的方法分析
Dec 19 #PHP
You might like
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
php字符串截取函数用法分析
2014/11/25 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
Python中join和split用法实例
2015/04/14 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
JAVA中运算符的分类及举例
2015/09/12 面试题
电子技术专业中专生的自我评价
2013/12/17 职场文书
投资协议书范本
2014/04/21 职场文书
2014教师研修学习体会
2014/07/08 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
爱心捐款感谢信
2015/01/20 职场文书
中国世界遗产导游词
2015/02/13 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书