首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中的延迟静态绑定到底是什么?

PHP中的延迟静态绑定到底是什么?
EN

Stack Overflow用户
提问于 2009-12-16 15:17:33
回答 5查看 45.6K关注 0票数 143

PHP中的延迟静态绑定到底是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-16 15:57:51

你绝对需要阅读PHP手册中的Late Static Bindings。然而,我会试着给你一个简短的总结。

基本上,这归结为self关键字不遵循相同的继承规则。self始终解析为使用它的类。这意味着,如果您在父类中创建一个方法并从子类调用它,self将不会像您预期的那样引用该子类。

后期静态绑定为static关键字引入了一种新的用法,它解决了这个特殊的缺点。当你使用static时,它代表你第一次使用它的类,即。它“绑定”到运行时类。

这是它背后的两个基本概念。当static运行时,selfparentstatic的操作方式可能很微妙,所以我强烈建议您研究手册页面示例,而不是深入讨论更多细节。一旦您了解了每个关键字的基础知识,示例是非常有必要的,以了解您将获得什么样的结果。

票数 211
EN

Stack Overflow用户

发布于 2013-11-19 22:06:03

没有非常明显的行为:

下面的代码生成'alphabeta‘。

代码语言:javascript
复制
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‘作为结果。

票数 27
EN

Stack Overflow用户

发布于 2015-08-13 20:27:57

从一个“我为什么要用这个?”从另一个角度来看,它基本上是一种改变解释/运行静态方法的上下文的方法。

对于self,上下文是您最初定义方法的上下文。在static中,它是你调用它的地方。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1912902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档