2014-10-27 69 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

相關問題