在PHP上通过self或类名访问常量之间的区别?

时间:2014-10-27 22:37:11

标签: php oop

使用self vs class name访问常量之间有什么区别(

class MyClass {

    const MAGIC_NUMBER = 4;

    protected $number;

    public function __construct()
    {
        $this->number = self::$MAGIC_NUMBER;
    }
}

VS

class MyClass {

    const MAGIC_NUMBER = 4;

    protected $number;

    public function __construct()
    {
        $this->number = MyClass::MAGIC_NUMBER;
    }
}

2 个答案:

答案 0 :(得分:1)

他们之间没有区别 你也不应该把$放在那里:

const MAGIC_NUMBER = 4;
protected $number;

答案 1 :(得分:1)

您提供的示例无效,我认为您可能会混淆常量和静态变量。

类常量:

class MyClass {
    const MAGIC_NUMBER = 4;

    protected $number;

    public function __construct()
    {
        $this->number = self::MAGIC_NUMBER; // or MyClass::MAGIC_NUMBER
    }
}

静态类变量:

class MyClass2 {
    static $MAGIC_NUMBER = 4;

    protected $number;

    public function __construct()
    {
        $this->number = MyClass2::$MAGIC_NUMBER; // or self::$MAGIC_NUMBER
    }
}

主要区别在于可以更改MyClass2 :: $ MAGIC_NUMBER,而在这两种情况下都可以访问这些值而无需该类的实例。