2017-08-01 140 views
1

我瞭解到,靜態優於因爲自做後期靜態綁定。

但我不知道這將是最好的參考常量變量。

class Black 
{ 
    const color = 'black'; 

    public function byThis() 
    { 
     return $this::color; 
    } 

    public function bySelf() 
    { 
     return self::color; 
    } 

    public function byStatic() 
    { 
     return static::color; 
    } 
} 

我檢查了所有三個getters工作良好。哪個是最好的選擇? (我使用PHP 7.0)

+0

的可能的複製[?何時使用自超過$這個(https://stackoverflow.com/questions/151969/when-to-use-self-over-this) –

+1

他們如果您創建一個重新定義該常量的子類,則不一樣。 'byThis()'和'byStatic()'將返回子類的值。 – Barmar

回答

1

PHP class constants documentation建議使用self::作爲班級中的常數。我個人會留在這。

關鍵字的每一個返回相同的值,即使類擴展與恆定的另一個值另一個類,除了parent::返回父類的值:

class White { 
    const color = "white"; 
} 

class Black extends White 
{ 
    const color = "black"; 

    public function byThis() 
    { 
     return $this::color; 
    } 

    public function bySelf() 
    { 
     return self::color; 
    } 

    public function byStatic() 
    { 
     return static::color; 
    } 

    public function byParent() { 
     return parent::color; 
    } 
} 

$black = new Black; 
echo "byThis: " . $black->byThis() . PHP_EOL; 
echo "bySelf: " . $black->bySelf() . PHP_EOL; 
echo "byStatic: " . $black->byStatic() . PHP_EOL; 
echo "byParent: " . $black->byParent() . PHP_EOL; 

輸出將是:

byThis: black 
bySelf: black 
byStatic: black 
byParent: white 
相關問題