试图了解php中的静态绑定

前端之家收集整理的这篇文章主要介绍了试图了解php中的静态绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<?PHP
class Record {

    protected static $tableName = 'base';

    public static function getTableName() {
        echo self::$tableName;
    }
}
class User extends Record {
    protected static $tableName = 'users';
}
User::getTableName();

显示:基地

题:

我知道我可以通过改变这行来改变问题echo self :: $tableName;回声static :: $tableName;它被称为’晚期静态绑定’,我读了doc here,但仍然不太明白.那么你可以给我一些解释:

一个.为什么这行代码echo self :: $tableName;显示:基数?

湾为什么这行代码echo static :: $tableName;显示用户

自己在编译时是静态的.这意味着当代码被编译时,决定自己所指的是什么.静态在运行时解析,即执行代码时.这是静态绑定的时间.这是有区别的.

使用自己,在编译时决定(当代码为“read”)时,自己指的是Record.后来对User的代码进行了解析,但在记录中的self :: $tableName已经指向Record :: $tableName,不能再更改了.

当您使用静态时,引用未立即解决.只有当您调用User :: getTableName()时才解决此问题,此时您位于User的上下文中,因此static :: $tableName已解析为User :: $tableName.

换句话说:自我总是指已经写入的类,没有两种方式.什么静态指的是取决于它使用的内容;在实践中,这意味着它可以引用子类,如果它发生的类正在被扩展.这使得它像$this一样工作,仅适用于静态上下文.

猜你在找的PHP相关文章