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

Susan Sarandon
Libérer: 2024-10-20 13:47:02
original
289 Les gens l'ont consulté

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!