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, ihre Begründung 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 die 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
Beim Zuweisen 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.
Fazit
Die Unfähigkeit, Funktionen in PHP-Attributen zu verwenden, ist auf Designentscheidungen innerhalb der zurückzuführen 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.
Das obige ist der detaillierte Inhalt vonWarum können PHP-Attribute den Funktionsaufruf nicht unterstützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!