Une fonction à l'intérieur d'une structure if
puis-je mettre une fonction en PHP à l'intérieur d'un si de la structure? comme ceci:
<?php
if(true){
function HelloWorld(){
echo "Hello World!!!";
}
HelloWorld();
}
?>
parce que j'ai essayé et il fonctionne, mais je ne sais pas si c'est correct ou pas. Grâce
source d'informationauteur Cattani Simone
Vous devez vous connecter pour publier un commentaire.
Ce qui est parfaitement légal, il définit simplement la fonction au sein de l'instruction si le bloc. Cela dit, tout à fait pourquoi vous voulez le faire c'est un peu un mystère.
Il est également intéressant de noter que cette fonction sera disponible dans la portée globale (c'est à dire: en dehors de l'instruction si le bloc),...
Voir le PHP Fonctions définies par l'utilisateur de la page de manuel pour plus d'informations.
Comme middaparka ditc'est parfaitement légal, mais en termes de l'utilisation de cela, vous pourriez vouloir vérifier si une fonction existe avant de déclarer:
function_exists
de la documentationIl semble un peu étrange, mais oui c'est légal
De PHP 5.3 si vous avez besoin d'une fonction avec une portée limitée (pour un rappel), vous pouvez utiliser les fonctions anonymes et les fermetures
Je voulais ajouter une réponse ici, car il y a une mise en garde qui n'est pas traitée dans les autres réponses.
Basé sur mes tests en 5.3, il apparaît que les fonctions qui sont définies à l'intérieur de
if
structures sont définies au moment de l'exécution, plutôt qu'au moment de la compilation, à l'instar d'autres fonctions.Par exemple, à l'extérieur d'un bloc conditionnel, ce:
fonctionne bien parce que la fonction est définie au moment de la compilation et à l'exécution lors de l'exécution. Mais l'appel de la fonction avant de la définir, alors que l'intérieur d'une condition de blocage:
Va produire un
call to undefined function
erreur, au moins à partir de la version 5.3.Mais la définition de la fonction dans un bloc si avant d'appeler cette fonction n'est valide:
Donc, il est l'un des principaux gotcha pour être au courant lors de la définition des fonctions à l'intérieur d'une condition: la fonction doit être définie dans le code avant l'appel de la fonction, puisque les fonctions conditionnelles ne pas sembler obtenir défini au moment de la compilation.
L'OP aussi posé des questions sur les performances. Si la réserve de fonction est définie au moment de l'exécution et non de la compilation comme la plupart des autres fonctions, alors cette fonction ne pourra pas bénéficier de la performance des boosters comme cache d'OpCode, qui, selon les circonstances, pourrait ralentir votre application. Par exemple, si votre maître de fichier php ressemblait:
Puis l'ensemble de l'application pourrait ne pas bénéficier de cache d'OpCode.
En principe oui, selon le manuel:
Personnellement, je n'ai pas eu une situation dans laquelle j'avais fait faire une telle chose. La plupart du temps, il serait plus facile pour un groupe de fonctions sur un endroit où il peut être trouvé! 😉