Maison  >  Article  >  développement back-end  >  Comment définir des propriétés de classe avec des valeurs d'expression en PHP ?

Comment définir des propriétés de classe avec des valeurs d'expression en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-20 13:48:29456parcourir

How to Define Class Properties with Expression Values in PHP?

Solution de contournement pour la syntaxe de base qui n'est pas analysée

Lorsque vous essayez de définir une propriété de classe avec une expression à droite du signe égal, PHP génère une erreur. En effet, PHP n'autorise que les valeurs primitives comme valeurs par défaut pour les constantes et les propriétés de classe.

Pour contourner cette limitation, nous pouvons utiliser une approche en deux étapes :

1. Introduire un tableau statique de constantes

Définir un tableau statique $_types au sein de la classe. Ce tableau contiendra toutes les valeurs constantes possibles.

<code class="php">static protected $_types = null;</code>

2. Créez une méthode pour récupérer des valeurs constantes

Implémentez une méthode getType() qui vous permet de récupérer des valeurs constantes par nom.

<code class="php">static public function getType($type_name) {
    self::_init_types();
    if (array_key_exists($type_name, self::$_types)) {
        return self::$_types[$type_name];
    } else {
        throw new Exception("unknown type $type_name");
    }
}

protected function _init_types() {
    if (!is_array(self::$_types)) {
        self::$_types = [
            'STRING_NONE' => 1 << 0,
            // ... include all constants
            'STRING_HOSTS' => 1 << 6
        ];
    }
}</code>

3. Initialiser les propriétés de classe à l'aide de getType()

Dans le constructeur, vous pouvez désormais initialiser les propriétés de classe à l'aide de la méthode getType().

<code class="php">function __construct($fString = null) {
    if (is_null($fString)) {
        $fString = self::getType('STRING_NONE') & self::getType('STRING_HOSTS');
    }
    var_dump($fString);
}</code>

En utilisant cette solution de contournement, vous pouvez conserver lisibilité et extensibilité future tout en adhérant aux restrictions syntaxiques de PHP.

Exemple :

<code class="php">$SDK = new SDK(SDK::getType('STRING_HOSTS'));</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn