Maison >développement back-end >tutoriel php >Comment définir des propriétés de classe avec des valeurs par défaut complexes en 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!