Initialisation de propriété avec des fonctions anonymes : pourquoi et comment ?
Comme mentionné dans l'extrait de code ci-dessous, initialiser une propriété avec une fonction anonyme pendant La déclaration de classe déclenche une "Erreur d'analyse : erreur de syntaxe, T_FUNCTION inattendue" en PHP. Pourtant, l'attribution de fonctions à des propriétés au sein des constructeurs est possible, comme le démontre le deuxième extrait.
// 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";
};
}
}
L'incapacité d'initialiser les propriétés directement avec des fonctions anonymes provient de l'implémentation de PHP. Les propriétés doivent être initialisées avec des valeurs constantes évaluables lors de la compilation, et les fonctions ne répondent pas à ce critère.
Malgré cette limitation, PHP permet l'affectation de fonctions à des propriétés au sein des constructeurs. En effet, les constructeurs sont exécutés au moment de l'exécution, ce qui permet des affectations dynamiques.
Bien que cette solution de contournement offre de la flexibilité, l'absence d'initialisation directe des propriétés avec des fonctions anonymes peut constituer un inconvénient dans certains scénarios. Cela nécessite du code supplémentaire et peut avoir un impact sur la lisibilité du code.
Bien que la raison de cette décision de conception en PHP reste quelque peu spéculative, les explications possibles incluent la complexité de la mise en œuvre d'une telle fonctionnalité et une demande insuffisante.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3