Maison  >  Article  >  développement back-end  >  Comment définir des propriétés de classe avec des valeurs par défaut complexes en PHP

Comment définir des propriétés de classe avec des valeurs par défaut complexes en PHP

Susan Sarandon
Susan Sarandonoriginal
2024-10-20 13:47:02290parcourir

How to Define Class Properties with Complex Default Values in PHP

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

Les règles de syntaxe strictes de PHP peuvent constituer un obstacle lors de la définition de propriétés de classe avec des valeurs par défaut complexes. Bien qu'une syntaxe telle que (1 << 0) puisse sembler simple, PHP la considère comme une expression avec des effets secondaires, et non comme une valeur par défaut valide dans les déclarations de classe.

Comprendre les limitations des déclarations de classe de PHP

En PHP, les valeurs par défaut des constantes ou des propriétés de classe doivent être des valeurs primitives, telles que :

const ABC = 8;
static $GHI = 15;

Cette restriction découle du principe selon lequel les déclarations déclaratives ne doivent pas créer d'effets secondaires.

Création de types définis par l'utilisateur et initialisation avec des expressions

Pour surmonter cette limitation, nous pouvons créer des types définis par l'utilisateur et les initialiser avec des expressions en dehors de la déclaration de classe :

class SDK {

    // Example of self-created type
    static private $STRING_NONE = 1 << 0;

}

$fString = SDK::$STRING_NONE;

Refactorisation de la classe d'origine

Application de cette solution de contournement à l'exemple de classe d'origine :

class SDK {

    static private $_types = null;

    static public function getType($type_name) {
        self::_init_types();
        return self::$_types[$type_name];
    }

    static private function _init_types() {
        if (!is_array(self::$_types)) {
            self::$_types = array(
                'STRING_NONE' => 1 << 0,
                // ... rest of types here
            );
        }
    }

    function __construct($fString = null) {
        if (is_null($fString)) {
            $fString = self::getType('STRING_NONE') & self::getType('STRING_HOSTS');
        }
    }

}

$SDK =& new SDK(SDK::getType('STRING_HOSTS'));

Cette approche nous permet de définir et d'utiliser des types dans la classe tout en prenant en compte les valeurs par défaut qui sont le résultat d'expressions.

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