PHP中的延迟静态绑定到底是什么?
发布于 2009-12-16 15:57:51
你绝对需要阅读PHP手册中的Late Static Bindings。然而,我会试着给你一个简短的总结。
基本上,这归结为self
关键字不遵循相同的继承规则。self
始终解析为使用它的类。这意味着,如果您在父类中创建一个方法并从子类调用它,self
将不会像您预期的那样引用该子类。
后期静态绑定为static
关键字引入了一种新的用法,它解决了这个特殊的缺点。当你使用static
时,它代表你第一次使用它的类,即。它“绑定”到运行时类。
这是它背后的两个基本概念。当static
运行时,self
、parent
和static
的操作方式可能很微妙,所以我强烈建议您研究手册页面示例,而不是深入讨论更多细节。一旦您了解了每个关键字的基础知识,示例是非常有必要的,以了解您将获得什么样的结果。
发布于 2013-11-19 22:06:03
没有非常明显的行为:
下面的代码生成'alphabeta‘。
class alpha {
function classname(){
return __CLASS__;
}
function selfname(){
return self::classname();
}
function staticname(){
return static::classname();
}
}
class beta extends alpha {
function classname(){
return __CLASS__;
}
}
$beta = new beta();
echo $beta->selfname(); // Output: alpha
echo $beta->staticname(); // Output: beta
但是,如果我们从beta类中删除classname函数的声明,我们会得到'alphaalpha‘作为结果。
发布于 2015-08-13 20:27:57
从一个“我为什么要用这个?”从另一个角度来看,它基本上是一种改变解释/运行静态方法的上下文的方法。
对于self
,上下文是您最初定义方法的上下文。在static
中,它是你调用它的地方。
https://stackoverflow.com/questions/1912902
复制相似问题