Heim >Backend-Entwicklung >PHP-Tutorial >So definieren Sie Klasseneigenschaften mit komplexen Standardwerten in PHP
Problemumgehung für nicht analysierte Basissyntax
Die strengen Syntaxregeln von PHP können eine Hürde darstellen, wenn Klasseneigenschaften mit komplexen Standardwerten definiert werden. Während eine Syntax wie (1 << 0) einfach erscheinen mag, betrachtet PHP sie als einen Ausdruck mit Nebenwirkungen und nicht als einen gültigen Standardwert in Klassendeklarationen.
Grundlegendes zu den Klassendeklarationsbeschränkungen von PHP
In PHP müssen Standardwerte für Klassenkonstanten oder Eigenschaften primitive Werte sein, wie zum Beispiel:
const ABC = 8; static $GHI = 15;
Diese Einschränkung ergibt sich aus dem Prinzip, dass deklarative Anweisungen keine Nebenwirkungen erzeugen sollten.
Benutzerdefinierte Typen erstellen und mit Ausdrücken initialisieren
Um diese Einschränkung zu überwinden, können wir benutzerdefinierte Typen erstellen und sie mit Ausdrücken außerhalb der Klassendeklaration initialisieren:
class SDK { // Example of self-created type static private $STRING_NONE = 1 << 0; } $fString = SDK::$STRING_NONE;
Refactoring der ursprünglichen Klasse
Anwenden dieser Problemumgehung auf das ursprüngliche Klassenbeispiel:
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'));Dieser Ansatz ermöglicht es uns, Typen darin zu definieren und zu verwenden die Klasse und berücksichtigt dabei Standardwerte, die das Ergebnis von Ausdrücken sind.
Das obige ist der detaillierte Inhalt vonSo definieren Sie Klasseneigenschaften mit komplexen Standardwerten in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!