J'essaie d'initialiser certaines valeurs dans une classe et de les enregistrer constante et d'y accéder à l'extérieur, dans une partie différente de mon code.
<?php class Config { public static function initialize() { define('TEST',"This is a Constant"); } } $config = Config::initialize(); // do something with the constants
5 Réponses :
Oui - Vous pouvez y accéder comme config :: test code> p>
N'est-ce pas le moyen d'accéder à Constantes de classe i>? Celui de l'extrait de l'extrait n'est pas une classe constante.
Oui, vous avez raison - les valeurs définies ne peuvent pas être définies de manière dynamique. Il n'a donc pas de sens de les mettre dans une fonction.
pas de votre code d'origine. Mais ce qui suit fonctionnerait comme une variable de classe constante.
echo Config::TEST;
class Config { const TEST = 0; const TEST2 = 1; protected static $conf = array(); public static function initialize($testVal, $test2Val) { $conf[self::TEST] = $testVal; $conf[self::TEST2] = $test2Val; } public static function get($key) { if(isset(self::$conf[$key]) { return self::$conf[$key]; } } } Config::initialize('Test', 'Test 2'); echo Config::get(Config::TEST); echo Config::get(Config::TEST2);
Une classe constante utilise le mot-clé en PHP, vous ne pouvez pas définir de manière dynamique la valeur d'une constante, mais vous pouvez obtenir un comportement similaire avec une variable statique publique. IE. P> const code>. Vous ne les définissez pas à l'aide de la fonction Définition. Tout comme ceci:
class Config3 {
private static $_test = null;
public static function initialize()
{
self::$_test = "This is not a constant, but can't be changed outside this class";
}
public static function getTest()
{
return self::$_test;
}
}
// Then use like
Config3::initialize();
var_dump(Config3::getTest());
Le contenu de la constante est dynamique, donc je ne peux pas le définir comme ça
Vous ne pouvez pas définir de manière dynamique de constante (AFAIK), j'ai ajouté des options alternatives.
@Ibu Brenton Alker a raison. Une constante ne peut pas être définie dynamique. Ceci est un comportement par défaut dans toutes les langues de programmation. Ce que vous voulez, c'est une variable de classe statique réadonnée qui n'est rien d'autre comme une variable statique privée sans seigur, de sorte qu'il ne peut être que initialiser par le constructeur.
Oui @Alexanderbehling, Statique privée était ce que je cherchais. Bien que cette question ait 10 ans. J'ai appris une chose ou 2 en cours de route.
La même chose est vraie pour moi. Au fur et à mesure que PHP a évolué, il serait absurde de poursuivre la programmation de la manière dont j'ai appris en 2002. Beaucoup de commandes utiles n'existaient pas alors, alors vous deviez utiliser de nombreux astuces pour que le code fonctionne de toute façon. Personnellement, j'aime bien que plus de fonctionnalités d'OOP sont désormais disponibles avec la ligne de sortie PHP 8. Depuis PHP 5, j'ai changé mon style de programmation vers OOP dans la mesure du possible. Je suis curieux de savoir ce qui viendra dans les prochaines années.
Peut-être que vous aurez peut-être tout ce dont vous aurez besoin dans ce cas est une variable privé code> avec getter em> méthodes ou une constante de classe. P>
Oui, je veux initialiser avec différents paramètres et y accéder à l'extérieur, avec cette fonction statique
Votre code définira une constante globale. Classe :: Les constantes sont une construction de syntaxe d'analyse et ne peuvent pas être définies plus tard.