Warum können PHP-Attribute keine Funktionen nutzen?
In PHP können Attributstandardwerte keine Funktionsaufrufe integrieren, eine Einschränkung, die Fragen aufwerfen kann über seine Umsetzung. Dieser Artikel befasst sich mit den technischen Grundlagen dieser Designentscheidung.
Begründung
Der Compilercode weist darauf hin, dass diese Einschränkung beabsichtigt ist, die Begründung dafür wird jedoch nicht bekannt gegeben. Die Untersuchung des Kompilierungsprozesses liefert einige Einblicke.
Kompilierungsprozess
Beim Parsen von Klassenvariablendeklarationen folgt der Compiler einer bestimmten Grammatik. Zuweisungen müssen statischen Skalardefinitionen entsprechen. Arrays innerhalb dieser Definitionen müssen auch statische Skalare enthalten.
Wenn die Grammatik nicht statische Arrays zulässt, würde der Code Syntaxprüfungen bestehen. Dies würde jedoch in der frühen Bindungsphase zu einem Kompilierungsfehler „Ungültiger Bindungstyp“ führen, der sicherstellt, dass der letzte Opcode im aktuellen Array mit bestimmten Typen übereinstimmt.
Problematische Opcodes
Bei der Zuweisung nicht statischer Arrays generiert der Compiler zusätzliche Opcodes, wie zum Beispiel INIT_ARRAY und DO_FCALL. Diese Opcodes verursachen eine Nichtübereinstimmung während der frühen Bindung und lösen den Fehler aus.
Mögliche Lösungen und Implementierungsherausforderungen
Andere dynamische Sprachen bewältigen solche Szenarien. Zu den möglichen Lösungen für PHP gehören:
Die Implementierung dieser Lösungen würde sorgfältige Überlegungen und nicht triviale Änderungen am Compiler erfordern.
Schlussfolgerung
Die Unfähigkeit, Funktionen in PHP-Attributen zu verwenden, ergibt sich aus Designentscheidungen innerhalb der Kompilierungsprozess. Obwohl dies wie eine Einschränkung erscheinen mag, scheint es eine bewusste Entscheidung der Sprachdesigner gewesen zu sein. Die Implementierung alternativer Lösungen würde eine erhebliche Umstrukturierung des Kompilierungsprozesses erfordern, die möglicherweise nicht als Priorität angesehen wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3