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系统流量分析的程序
Oct 09 PHP
PHP学习之PHP表达式
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
CI框架Session.php源码分析
Nov 03 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php数组合并与拆分实例分析
Jun 12 PHP
双冒号 ::在PHP中的使用情况
Nov 05 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
PHP空值检测函数与方法汇总
Nov 19 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/06/08 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
antd table按表格里的日期去排序操作
2020/11/17 Javascript
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
好的演讲稿开场白
2013/12/30 职场文书
家长会演讲稿范文
2014/01/10 职场文书
保密工作实施方案
2014/02/24 职场文书
留学顾问岗位职责
2014/04/14 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
高效课堂标语
2014/06/26 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
幼儿园教师管理制度
2015/08/05 职场文书