self :: vs class Name :: inside static class PHP中的名称方法

时间:2010-08-13 22:29:16

标签: php class static

我想可能没有任何差别,但个人偏好,但在阅读各种PHP代码时,我遇到了两种方法来访问方法类。

的区别是什么:

class Myclass
{
    public static $foo;

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

2 个答案:

答案 0 :(得分:34)

(注:初始版本表示没有差异。实际上有)

确实存在很小的差异。 self::转发静态呼叫,而className::则不转发。这仅适用于PHP 5.3 +中的late static bindings

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

<?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

答案 1 :(得分:1)

使用self,你可以在课堂上使用它,并使用“MyClass”,你可以在外部引用它:

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