2017-08-01 4 views
1

J'ai appris que statique est mieux que auto parce que l'auto fait la liaison statique tardive.

Mais je me demande quel serait le meilleur pour faire référence const variable.

class Black 
{ 
    const color = 'black'; 

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

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

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

J'ai vérifié que les trois getters fonctionnent bien. Quel est le meilleur choix? (J'utilise PHP 7.0)

+0

double possible de [? Quand utiliser l'auto de plus de $ ce] (https://stackoverflow.com/questions/151969/when-to-use-self-over-this) –

+1

Ils sont pas la même chose si vous créez une sous-classe qui redéfinit la constante. 'byThis()' et 'byStatic()' retourneront la valeur de la sous-classe. – Barmar

Répondre

1

Le PHP class constants documentation recommande l'utilisation de self:: pour une constante au sein d'une classe. Personnellement, je resterais avec ça.

Chacun des mots-clés renvoient la même valeur, même si la classe étend une autre classe avec une autre valeur pour la constante, sauf pour parent:: qui retourne la valeur de la classe parente:

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; 

La sortie serait être:

byThis: black 
bySelf: black 
byStatic: black 
byParent: white