代码之家  ›  专栏  ›  技术社区  ›  raveren

PHP中self::vs className::inside静态类名metods

  •  14
  • raveren  · 技术社区  · 14 年前

    我想可能没有什么区别,但个人喜好,但当阅读各种PHP代码时,我遇到了访问methods类的两种方法。

    class Myclass
    {
        public static $foo;
    
        public static function myMethod ()
        {
            // between:
            self::$foo;
            // and
            MyClass::$foo;
        }
    }
    
    2 回复  |  直到 6 年前
        1
  •  40
  •   Artefacto    14 年前

    (注:最初的版本说没有区别。实际上有)

    确实有一点差别。 self:: className:: 不。这只对你重要 late static bindings

    在静态调用中,PHP5.3+会记住最初调用的类。使用 使PHP“忘记”该值(即,将其重置为 className ),而 自我: 保存它。考虑:

    <?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
    
        2
  •  1
  •   gabe3886    14 年前

    通过self,您可以在类中使用它,通过“MyClass”,您可以在外部引用它:

    $instance = new Myclass();
    $variable = $instance::$foo