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 相关文章推荐
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
洪恩在线成语词典小偷程序php版
Apr 20 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
PHP的几个常用加密函数
Feb 03 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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
php设计模式之观察者模式的应用详解
2013/05/21 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php自动获取关键字的方法
2015/01/06 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
Use Word to Search for Files
2007/06/15 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
pytorch 常用线性函数详解
2020/01/15 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python字典按照value排序方法
2020/12/28 Python
python Scrapy框架原理解析
2021/01/04 Python
如何判断计算机可能已经中马
2013/03/22 面试题
实习教师自我鉴定
2013/09/27 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
老人节标语大全
2014/10/08 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle