PHP延迟静态绑定使用方法实例解析
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-26 08:53:30 浏览: 评论:0
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
Tags: PHP延迟静态绑定
- 上一篇:PHP autoload使用方法及步骤详解
- 下一篇:最后一页
相关文章
- ·PHP Static延迟静态绑定用法分析(2021-07-14)
- ·PHP延迟静态绑定的深入讲解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)