PHP延迟静态绑定使用方法实例解析


Posted in PHP onSeptember 05, 2020

PHP的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。我们来看一下代码清单5-11中的例子。

代码清单5-11 意想不到的继承

<?php
 class ParentBase {
  static $property = 'Parent Value';
  public static function render() {
   return self::$property;
  }
 }
 class Descendant extends ParentBase {
  static $property = 'Descendant Value';
 }
 echo Descendant::render();
 Parent Value

在这个例子中,render()方法中使用了self关键字,这是指ParentBase类而不是指Descendant类。在ParentBase::render()方法中没法访问$property的最终值。为了解决这个问题,需要在子类中重写render()方法。

通过引入延迟静态绑定功能,可以使用static作用域关键字访问类的属性或者方法的最终值,如代码所示。

<?php
 class ParentBase {
  static $property = 'Parent Value';
  public static function render() {
   return static::$property;
  }
} 
 class Descendant extends ParentBase {
  static $property = 'Descendant Value';
 }
 echo Descendant::render();
 Descendant Value

通过使用静态作用域,可以强制PHP在最终的类中查找所有属性的值。除了这个延迟绑定行为,PHP还添加了get_called_class()函数,这允许检查继承的方法是从哪个派生类调用的。以下代码显示了使用get_called_class()函数获得当前的类调用场景的方法。

使用get_called_class()方法

<?php
 class ParentBase {
  public static function render() {
   return get_called_class();
  }
 }
 class Decendant extends ParentBase {}
 echo Descendant::render(); 
 Descendant

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP autoload使用方法及步骤详解
Sep 05 #PHP
PHP数组访问常用方法解析
Sep 05 #PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 #PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 #PHP
Laravel Reponse响应客户端示例详解
Sep 03 #PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 #PHP
PHP copy函数使用案例代码解析
Sep 01 #PHP
You might like
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
Python和php通信乱码问题解决方法
2014/04/15 Python
python中的函数用法入门教程
2014/09/02 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
python中if嵌套命令实例讲解
2021/02/25 Python
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
先进班组事迹材料
2014/12/25 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
教师读书笔记
2015/06/29 职场文书
总经理年会致辞
2015/07/29 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书