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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
php生成动态验证码gif图片
Oct 19 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
Sep 14 PHP
PHP运行模式汇总
Nov 06 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 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弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Python中使用中文的方法
2011/02/19 Python
详解Swift中属性的声明与作用
2016/06/30 Python
Python算法之图的遍历
2017/11/16 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Python序列化pickle模块使用详解
2020/03/05 Python
利用python生成照片墙的示例代码
2020/04/09 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
电子信息工程自荐信
2014/05/26 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
二手车转让协议书
2015/01/29 职场文书
python基础之爬虫入门
2021/05/10 Python
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
Node与Python 双向通信的实现代码
2021/07/16 Javascript