PHP ne permet pas
class Foo
{
private const my_private_const;
mais bien sûr permet
const my_const;
Donc en fait les constantes sont globales car je peux accéder à my_const
n'importe où en utilisant Foo::my_const
Existe-t-il un moyen de créer des constantes privées?
La réponse est un simple "non". PHP ne prend pas en charge ce concept. Le mieux que vous puissiez faire est un private static
variable dans la classe, ce qui n'est pas aussi bon bien sûr car ce n'est pas en lecture seule. Mais il vous suffit de contourner cela.
Modifier
Votre question m'a fait réfléchir - voici quelque chose que je n'ai jamais essayé, mais qui pourrait fonctionner. Autrement dit, "cela n'a pas été testé". Mais supposons que vous vouliez une "constante privée" appelée FOO
:
// "Constant" definitions
private function __get($constName){
// Null for non-defined "constants"
$val = null;
switch($constName){
case 'FOO':
$val = 'MY CONSTANT UNCHANGEABLE VALUE';
break;
case 'BAR':
$val = 'MY OTHER CONSTANT VALUE';
break;
}
return $val;
}
Bien sûr, votre syntaxe serait un peu étrange:
// Retrieve the "constant"
$foo = $this->FOO;
... mais au moins cela ne fonctionnerait pas:
$this->FOO = 'illegal!';
Peut-être que quelque chose mérite d'être essayé?
À votre santé
Gens! PHP 7.1.0 a été publié
Il est maintenant possible d'avoir des modificateurs de visibilité avec des constantes de classe.
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
Sortie de l'exemple ci-dessus dans PHP 7.1:
bar
Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
Notez que des modificateurs de visibilité pour les constantes de classe ont été ajoutés dans PHP 7.1.
Une version simplifiée de la solution de contournement de @Madbreaks: écrivez une fonction statique privée qui renvoie la valeur de votre "constante" privée:
private static function MY_CONSTANT() {
return "constant string";
}
Usage:
public static function DoStuff() {
echo self::MY_CONSTANT();
}