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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
php相当简单的分页类
Oct 02 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php中filter_input函数用法分析
Nov 15 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
PHP实现本地图片转base64格式并上传
May 29 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 获取mysql数据库信息代码
2009/03/12 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
JS script脚本中async和defer区别详解
2020/06/24 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python的Urllib库的基本使用教程
2015/04/30 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
python退出循环的方法
2020/06/18 Python
python如何提升爬虫效率
2020/09/27 Python
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
住房租房协议书
2014/08/20 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
董事长开业致辞
2015/07/29 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
心得体会格式及范文
2016/01/25 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python实现腾讯滑块验证码识别
2021/04/27 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript