• 售前

  • 售后

热门帖子
入门百科

PHP后期静态绑定实例浅析

[复制链接]
史剑浇 显示全部楼层 发表于 2021-10-26 12:55:16 |阅读模式 打印 上一主题 下一主题
本文实例讲述了PHP后期静态绑定。分享给各人供各人参考,具体如下:
从php5.3开始,php增加了一个叫后期绑定的功能,用于在继续范围内引用静态调用的类
该功能从语言内部角度考虑北命名为“后期静态绑定”;“后期绑定”意思说:static::不再被解析为界说当火线法地点的类,而是在实际运行时计算的,也可以成为“静态绑定”;因为他可以用于(但不限于静态方法的调用)。
self::的限制
使用
  1. self::
复制代码
大概
  1. _class_
复制代码
对当前类的静态引用,取决于界说当火线法地点的类
例子:
  1. class A {
  2.   public static function who() {
  3.     echo __CLASS__;
  4.   }
  5.   public static function test() {
  6.     self::who();
  7.   }
  8. }
  9. class B extends A {
  10.   public static function who() {
  11.     echo __CLASS__;
  12.   }
  13. }
  14. B::test(); //A
复制代码
打印效果:
  1. A
复制代码
后期静态绑定的用法
后期静态绑定试图通过引入一个关键字表示运行时最初调用的类来绕过限制。简单的说,这个关键字能够让你在上述中调用test()时引用的类是B而不是A。最终决定不引用新的关键字,而是使用已经预留static关键字
例子:
  1. <?php
  2. class A {
  3.   public static function who() {
  4.     echo __CLASS__;
  5.   }
  6.   public static function test() {
  7.     static::who(); // 后期静态绑定从这里开始
  8.   }
  9. }
  10. class B extends A {
  11.   public static function who() {
  12.     echo __CLASS__;
  13.   }
  14. }
  15. B::test();
  16. ?>
复制代码
打印效果是:
  1. B
复制代码
后期静态绑定的处理方式办理了以往完全没有办理的静态调用,别的一方面,如果静态调用使用parent::大概self::将转发调用信息
  1. <?php
  2. class A {
  3.   public static function foo() {
  4.     static::who();
  5.   }
  6.   public static function who() {
  7.     echo __CLASS__."\n";
  8.   }
  9. }
  10. class B extends A {
  11.   public static function test() {
  12.     A::foo();
  13.     parent::foo();
  14.     self::foo();
  15.   }
  16.   public static function who() {
  17.     echo __CLASS__."\n";
  18.   }
  19. }
  20. class C extends B {
  21.   public static function who() {
  22.     echo __CLASS__."\n";
  23.   }
  24. }
  25. C::test();
  26. ?>
复制代码
打印效果:
  1. A
  2. C
  3. C
复制代码
例子:
  1. <?php
  2. class a {
  3. static public function test() {
  4.   print get_called_class();
  5. }
  6. }
  7. class b extends a {
  8. }
  9. a::test();
  10. b::test();
  11. ?>
复制代码
打印效果:
  1. a
  2. b
复制代码
特别声明:
  1. get_called_class()
复制代码
;得到类的名称静态方法中调用
更多关于PHP相干内容感爱好的读者可检察本站专题:《php面向对象步调筹划入门教程》、《PHP数组(Array)操纵本领大全》、《PHP根本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操纵入门教程》及《php常见数据库操纵本领汇总》
希望本文所述对各人PHP步调筹划有所帮助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作