6
votes

Puis-je définir une constante dans une classe puis l'accéder à l'extérieur dans PHP?

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


2 commentaires

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.


5 Réponses :


0
votes

Oui - Vous pouvez y accéder comme config :: test


2 commentaires

N'est-ce pas le moyen d'accéder à Constantes de classe ? 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.



1
votes

pas de votre code d'origine. Mais ce qui suit fonctionnerait comme une variable de classe constante.

echo Config::TEST;


0 commentaires

5
votes
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);

0 commentaires

9
votes

Une classe constante utilise le mot-clé const code>. Vous ne les définissez pas à l'aide de la fonction Définition. Tout comme ceci: xxx pré>

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>

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());


5 commentaires

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.



0
votes

Peut-être que vous aurez peut-être tout ce dont vous aurez besoin dans ce cas est une variable privé avec getter méthodes ou une constante de classe.


0 commentaires