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初学者头疼问题总结
Jul 08 PHP
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
别人整理的服务器变量:$_SERVER
Oct 20 PHP
PHP 防恶意刷新实现代码
May 16 PHP
php数组中删除元素的实现代码
Jun 22 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
Jun 05 PHP
初识laravel5
Mar 02 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP回调函数与匿名函数实例详解
Aug 16 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php调用mysql存储过程
2007/02/14 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
js 动态选中下拉框
2009/11/26 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
Python中的yield浅析
2014/06/16 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
管理部副部长岗位职责范文
2014/03/09 职场文书
社区反邪教工作方案
2014/06/16 职场文书
安全责任书怎么写
2014/07/28 职场文书
好的旅游活动方案
2014/08/19 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
换届选举主持词
2015/07/03 职场文书
小学运动会前导词
2015/07/20 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
vue3不同环境下实现配置代理
2022/05/25 Vue.js