2014-10-27 73 views
-1

使用self与类名访问常量之间有什么区别(如果有的话)。在PHP上通过self或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; 
    } 
} 
+1

你弄乱了'$'符号。常量没有,'protected'没有在前面,但'protected $ number'应该有它。我不认为你可以通过'$ this->访问常量'看看这里 - http://php.net/manual/en/language.oop5.constants.php – Cheery 2014-10-27 22:39:58

+0

对不起,我写这个从我的脑海直到所以。我们并没有意识到我们依赖IDE来处理这些错误。 – mimoralea 2014-10-27 23:29:20

+0

不知道为什么倒票。即使存在格式问题,我认为这个问题仍然非常有效?我的坏人如果冒犯了任何人。 – mimoralea 2014-10-27 23:32:35

回答

1

他们之间没有什么区别。
还你不应该把$有:

const MAGIC_NUMBER = 4; 
protected $number; 
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可以改变的,而在这两种情况下的数值可以在无需访问类的一个实例。

+0

对不起,是的,我在例子中犯了一个错误。我把他们从我的头上弄到了。会考虑再次这样做。总之,谢谢你的完整答案。 – mimoralea 2014-10-27 23:34:18

相关问题