PHP后期静态绑定
时间:2018-11-15 15:18:17 来源:igfitidea点击:
在本教程中,我们将学习PHP后期静态绑定(PHP Late Static Binding),这是在PHP 5.3中添加的一个有趣的功能。
让我们从一个简单的例子开始。
<?php class Model { protected static $tableName = 'Model'; public static function getTableName() { return self::$tableName; } } class User extends Model { protected static $tableName = 'User'; } echo User::getTableName(); // Model, 而不是 User
首先,我们创建了一个模型类Model,它有:
一个值为Model的静态属性$tableName
和一个返回$tableName值的getTableName()
静态方法。
注意,我们使用self和操作符::
来访问模型类Model中的静态属性。
其次,我们创建了另一个名为User的类,它扩展了模型类Model。User类也有一个$tableName静态属性。
最后,我们调用User类的getTableName()方法。但是,它返回的是Model
而不是User
。
原因是self总是解析为方法所属的类。这意味着,如果您在父类中定义了一个方法并从子类中调用它,self就不会像我们期望的那样引用子类。
为了解决这个问题,从5.3版本开始,PHP引入了一个称为PHP后期静态绑定
的新特性。基本上,不使用self,而是使用static关键字来引用在运行时调用的类。
让我们修改一下上面的例子:
<?php class Model{ protected static $tableName = 'Model'; public static function getTableName(){ return static::$tableName; } } class User extends Model{ protected static $tableName = 'User'; } echo User::getTableName(); // User
现在我们就得到了想要的结果。
请注意,static::
只能引用静态属性和静态方法。