Maison > développement back-end > tutoriel php > 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
Libérer: 2024-10-20 13:48:29
original
534 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal