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 归并排序 数组交集
May 10 PHP
PHP安全性漫谈
Jun 28 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
项目中应用Redis+Php的场景
May 22 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP 实现缩略图
2021/03/09 PHP
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
TensorFlow实现iris数据集线性回归
2018/09/07 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
python命令 -u参数用法解析
2019/10/24 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
2014年网管工作总结
2014/12/11 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
贫困证明书范文
2015/06/16 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书