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 大数据量及海量数据处理算法总结
May 07 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
Yii框架表单提交验证功能分析
Jan 07 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
PHP 计算两个特别大的整数实例代码
May 07 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
晶体管单管来复再生式收音机
2021/03/02 无线电
删除数组元素实用的PHP数组函数
2008/08/18 PHP
php 定界符格式引起的错误
2011/05/24 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php设计模式小结
2013/02/15 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Python map及filter函数使用方法解析
2020/08/06 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
竞争上岗演讲稿范文
2014/05/12 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
个人授权委托书范本
2014/09/14 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
人力资源部岗位职责
2015/02/11 职场文书
正规借条模板
2015/05/26 职场文书
狂人日记读书笔记
2015/06/30 职场文书
酒店厨房管理制度
2015/08/06 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
delete in子查询不走索引问题分析
2022/07/07 MySQL