HTML HTML5 PHP Mysql Linux 缓存技术 工具 资讯 读书 其他
当前位置: 资讯首页 » 全文内容

PHP后期静态绑定介绍

发布于: 2017-02-18 09:38:06 )
PHP后期静态绑定主要用于解决:

在继承范围内引用静态调用的类

首先来看下面这个例子:

<?php

class Person
{
    public static function status()
    {
        self::getStatus();
    }

    protected static function getStatus()
    {
        echo "我是过去";
    }
}


// Deceased 继承 Person

class Deceased extends Person
{
    protected static function getStatus()
    {
        echo "未来已来";
    }
}

 
Deceased::status(); // 输出:我是过去
?>
很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,但更好的解决方案是使用PHP 5.3后添加了后期静态绑定的功能


<?php
class Person
{
    public static function status()
    {
        static::getStatus();
    }
    protected static function getStatus()
    {
        echo "我是过去";
    }
}
 
class Deceased extends Person
{
    protected static function getStatus()
    {
        echo "未来已来";
    }
}
 
Deceased::status();  // 输出:未来已来   

//与预计输出一致。

?>


可见,static::不在指向当前所在的类,实际上,它是在运行中计算的,强制获取最终类的所有属性。
因此,建议,以后不要再使用self::而是使用static:: 。
To Top