Portée des fonctions

La dernière fois, je me posais la question de savoir comment Symfony faisait pour proposer dans ses vues des fonctions telles que __() (les helpers) puisque je pensais que la seule solution de rendre une fonction utilisateur locale à une méthode de classe était de la déclarer directement dans la méthode et que je n’ai trouvé aucun moyen de transmettre cette fonction à cette méthode (comme cela se passe pour les variables). Et pour cause, on n’en n’a pas besoin!

Un petit retour aux basics de PHP m’a confirmé que la création d’une fonction dans une méthode de classe la rendait globale à tout le programme, même dans la méthodes d’une autre classe. Du coup Symfony déclare « bêtement » (je met entre guillemets car Symfony oblige, ce n’est pas si simple :)) ces fonctions dans la méthode d’une autre classe.

Exemple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class MaClasse
{
    public function registerFunction()
    {
        function ma_fonction()
        {
            // Traitement
        }
    }
}
 
// A ce moment, on ne peut pas appeler ma_fonction() car sa déclaration ne s'est pas faite
 
$instance = new MaClasse();
$instance->registerFunction();
 
// Maintenant on peut l'appeler
ma_fonction();
?>

Comme dit précédemment, on pourra donc également appeler ma_fonction() à l’intérieur d’une méthode d’une autre classe ou n’importe où dans le programme.

Attention cependant : PHP n’accepte pas la redéfinition des fonctions déjà déclarées, ce qui veut dire que si on s’amuse à appeler une deuxième fois la méthode registerFunction(), on aura un beau message d’erreur.

Comme quoi, relire les bases de temps en temps ça fait pas de mal 😉

Mots-clefs : , , ,



Laisser une réponse

Vous devez être connecté pour publier un commentaire.