试图了解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一样工作,仅适用于静态上下文. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |