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文件下载类
Dec 06 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
Python正则表达式和re库知识点总结
2019/02/11 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
六道php面试题附答案
2014/06/05 面试题
一套PHP的笔试题
2013/05/31 面试题
会计应届生的自荐信
2013/12/13 职场文书
三年大学自我鉴定
2014/01/16 职场文书
股权收购意向书
2014/04/01 职场文书
大学生求职信怎么写
2015/03/19 职场文书
实用求职信模板范文
2019/05/13 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
js Proxy的原理详解
2021/05/25 Javascript
python基础之类方法和静态方法
2021/10/24 Python