首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >self::vs className::inside静态className方法

self::vs className::inside静态className方法
EN

Stack Overflow用户
提问于 2010-08-13 22:29:16
回答 2查看 8.4K关注 0票数 22

我想可能没有什么不同,但个人偏好,但当我阅读各种PHP代码时,我遇到了两种方式访问方法类。

不同之处是:

代码语言:javascript
复制
class Myclass
{
    public static $foo;

    public static function myMethod ()
    {
        // between:
        self::$foo;
        // and
        MyClass::$foo;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-13 22:31:21

(注:最初版本说没有差别。)(其实有)

确实有一个小小的差别。self::转发静态调用,而className::不转发。这只对PHP5.3+中的后期静态绑定很重要。

在静态调用中,PHP会记住最初调用的类。使用className::使PHP“忘记”此值(即将其重置为className),而self::则保留它。考虑:

代码语言:javascript
复制
<?php
class A {
    static function foo() {
        echo get_called_class();
    }
}
class B extends A {
    static function bar() {
        self::foo();
    }
    static function baz() {
        B::foo();
    }
}
class C extends B {}

C::bar(); //C
C::baz(); //B
票数 42
EN

Stack Overflow用户

发布于 2010-08-13 22:34:20

对于self,您可以在类中使用它,并与"MyClass“一起使用它,就像您已经使用的那样,您可以在外部引用它:

代码语言:javascript
复制
$instance = new Myclass();
$variable = $instance::$foo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3481085

复制
相关文章

相似问题

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