Eigenschaftsinitialisierung mit anonymen Funktionen: Warum und wie?
Wie im folgenden Codeausschnitt erwähnt, wird eine Eigenschaft mit einer anonymen Funktion initialisiert Die Klassendeklaration löst in PHP einen „Parse-Fehler: Syntaxfehler, unerwartete T_FUNCTION“ aus. Dennoch ist die Zuweisung von Funktionen zu Eigenschaften innerhalb von Konstruktoren möglich, wie im zweiten Snippet gezeigt.
// Property initialization with anonymous function error
class AssignAnonFunction {
private $someFunc = function() {
echo "Will Not work";
};
}
// Property initialization in constructor
class AssignAnonFunctionInConstructor {
private $someFunc;
public function __construct() {
$this->someFunc = function() {
echo "Does Work";
};
}
}
Die Unfähigkeit, Eigenschaften direkt mit anonymen Funktionen zu initialisieren, ist auf die PHP-Implementierung zurückzuführen. Eigenschaften müssen mit konstanten Werten initialisiert werden, die während der Kompilierung ausgewertet werden können, und Funktionen erfüllen dieses Kriterium nicht.
Trotz dieser Einschränkung ermöglicht PHP die Zuweisung von Funktionen zu Eigenschaften innerhalb von Konstruktoren. Dies liegt daran, dass Konstruktoren zur Laufzeit ausgeführt werden, was dynamische Zuweisungen ermöglicht.
Während diese Problemumgehung Flexibilität bietet, kann das Fehlen einer direkten Eigenschaftsinitialisierung mit anonymen Funktionen in bestimmten Szenarien ein Nachteil sein. Es erfordert zusätzlichen Code und kann die Lesbarkeit des Codes beeinträchtigen.
Obwohl der Grund für diese Designentscheidung in PHP etwas spekulativ bleibt, sind mögliche Erklärungen unter anderem die Komplexität der Implementierung einer solchen Funktion und die unzureichende Nachfrage danach.
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