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自动反斜杠的函数代码
Jan 05 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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的几个常用数字判断函数代码
2012/04/24 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
python http接口自动化脚本详解
2018/01/02 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Python编写万花尺图案实例
2021/01/03 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
刑事辩护词范文
2015/05/21 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
初中运动会前导词
2015/07/20 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
心理学培训心得体会
2016/01/22 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
vue自定义右键菜单之全局实现
2022/04/09 Vue.js