加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

试图了解php中的静态绑定

发布时间:2020-12-13 16:34:42 所属栏目:PHP教程 来源:网络整理
导读:?phpclass Record { protected static $tableName = 'base'; public static function getTableName() { echo self::$tableName; }}class User extends Record { protected static $tableName = 'users';}User::getTableName(); 它显示:基地 题: 我知道我可
<?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一样工作,仅适用于静态上下文.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读