这篇文章主要介绍了PHP延迟静态绑定使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

PHP的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。我们来看一下代码清单5-11中的例子。

代码清单5-11 意想不到的继承

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作用域关键字访问类的属性或者方法的最终值,如代码所示。

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()方法

class ParentBase {

public static function render() {

return get_called_class();

}

}

class Decendant extends ParentBase {}

echo Descendant::render();

Descendant

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

来源:脚本之家

链接:https://www.jb51.net/article/194985.htm

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

php的延迟绑定,PHP延迟静态绑定使用方法实例解析相关推荐

  1. linux延迟绑定,php延迟绑定和非延迟绑定解析

    php版本: php5.6 延迟绑定有: get_class($this), get_called_class(), new static(), static:: 非延迟绑定有:get_class() ...

  2. php中延迟绑定,PHP静态延迟绑定

    静态延迟绑定的概念 PHP版本5.3起增加了静态延迟绑定,也称迟绑定,主要用于在继承范围内引用静态调用的类.简单地来说:static::不再被解析为当前方法所定义的类,而是在实际运行时计算的. // ...

  3. 跨越边界: 延迟绑定

    转载:http://www.ibm.com/developerworks/cn/java/j-cb11076.html 几年前,我有幸教我的大女儿学滑雪.滑雪学校提供的工具里有一条绳子,用这条绳把雪橇 ...

  4. scala学习手记34 - trait方法的延迟绑定

    trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer {def write(me ...

  5. PLT、POT、延迟绑定

    学习地址:(是一位同学讲的,虽然青涩.但是,还能听明白!)[pwn]CTF学习:4.PLT表与GOT表 | 延迟绑定机制_哔哩哔哩_bilibili GOTGOT表项中的数据才是函数最终的地址,而PL ...

  6. Python闭包与延迟绑定

    Python闭包 1.什么是闭包,闭包必须满足以下3个条件: 必须有一个内嵌函数 内嵌函数必须应用外部函数的变量 外部函数的返回值必须是内嵌函数 举个栗子 # 嵌套函数但不是闭包 def nested ...

  7. python闭包的延迟绑定_浅析Python的闭包和延迟绑定

    def multipliers(): return [lambda x : i * x for i in range(4)] print [m(2) for m in multipliers()] 你 ...

  8. 面向对象PHP之静态延迟绑定

    ###定义 首先从字面上的意思来理解,"静态"表示该用法是给静态变量和方法来使用的,"延迟绑定",是指在程序运行时而不是编译时决定的.下面来看看代码. ###实 ...

  9. 通知与服务——服务Service——服务的绑定与解绑延迟绑定服务与解绑服务

    =============================================================================================== 布局: ...

最新文章

  1. dump文件_一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解
  2. 用计算机怎么开启音乐模式,XP开机音乐怎么设置?如何设置电脑开机音乐?
  3. mybatis08--关联查询多对一
  4. erlang md5
  5. Oracle超出最大连接数问题及解决
  6. websocket 获取连接id_nodejs做后端,用websocket写聊天室,怎么获取连接用户的ip呢?...
  7. 《MySQL——count()逻辑》
  8. Linux C高级编程——网络编程之以太网(2)
  9. kali linux学习入门- Chrome浏览器安装,可以正常打开
  10. mayan 游戏真是毒瘤
  11. Linux服务跟随启动,关于linux服务启动与自启动
  12. php表单验证插件下载,强力推荐10款Javascript表单验证插件
  13. ubuntu IPV6及作为路由分配【笔记】
  14. ThreadLocal实战之数据库执行器线程同步
  15. 新手如何做游戏代理赚钱?
  16. 蓝桥杯-K好数(详解易懂)java
  17. 山东大学博士 计算机 统考,报考山大统招博士需谨慎
  18. WebApi 路由机制剖析
  19. Kaili Linux系统修改mac地址(ubuntu等其它系统也同理)
  20. 关于Java RDP协议实现远程桌面连接的开源项目properjavardp

热门文章

  1. Rocksdb Ribbon Filter : 结合 XOR-filter 以及 高斯消元算法 实现的 高效filter
  2. SSM框架——Spring+SpringMVC+Mybatis的搭建教程
  3. [转帖]tar高级教程:增量备份、定时备份、网络备份
  4. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
  5. css3之border-radius理解
  6. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34
  7. 【分享】bootstrap学习笔记
  8. 在别的电脑上运行cg程序出现错误的解决办法
  9. (转)koogra--Excel文件读取利器
  10. python-opencv 定位识别读表