Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas initialiser une propriété de classe avec une fonction anonyme en PHP ?

Pourquoi ne puis-je pas initialiser une propriété de classe avec une fonction anonyme en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 20:53:29116parcourir

 Why Can't I Initialize a Class Property with an Anonymous Function in PHP?

Initialisation d'une propriété de classe avec une fonction anonyme

L'impossibilité d'initialiser directement une propriété de classe à une fonction lors de la déclaration de la propriété en PHP est due aux limitations de la syntaxe de déclaration de propriété du langage.

PHP ne permet pas l'initialisation de propriétés avec des expressions qui ne peuvent pas être évaluées au moment de la compilation. Les fonctions, étant des entités dynamiques, ne peuvent pas être évaluées statiquement et ne peuvent donc pas être utilisées pour l'initialisation de propriétés.

Cela est évident dans l'extrait de code suivant, qui entraîne une erreur de syntaxe :

<code class="php">class AssignAnonFunction {
    private $someFunc = function() {
      echo "Will Not work";
    };
}</code>

Cependant, il est possible d'attribuer une fonction à une propriété après que la classe ait été instanciée. Ceci peut être réalisé en utilisant la méthode constructeur :

<code class="php">class AssignAnonFunctionInConstructor {
    private $someFunc;

    public function __construct() {
      $this->someFunc = function() {
        echo "Does Work";
      };
    }
}</code>

La raison de cet écart est que l'attribution des propriétés dans le constructeur se produit au moment de l'exécution, où les fonctions peuvent être attribuées dynamiquement.

C'est Il est important de noter que la limitation de l'initialisation des propriétés avec des fonctions est un aspect fondamental de la conception du langage PHP. Bien que cela puisse être gênant dans certains scénarios, cela garantit que les propriétés sont initialisées avec des valeurs cohérentes et évite les erreurs d'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn