6
votes

Fonctions qui peuvent être appelées qu'une seule fois

J'utilise l'approche suivante:

$foo_called = false;

function foo()
{
    if($foo_called)
    {
        return;
    }

    $foo_called = true;

    // do something.
}


2 commentaires

Eh bien, pour commencer, cela ne fera même pas ce que vous voulez faire, car $ FOO_CALLÉD n'existe pas dans la portée de la fonction. Vous devriez le déclarer une variable globale à l'intérieur de la fonction pour cette approche de travailler.


@Hameritie: C'est vrai. J'ai changé le code pour résoudre le problème de la portée.


7 Réponses :



2
votes

Regardez le Singleton Modèle ?

du manuel "Le motif singleton s'applique aux situations dans lesquelles il doit être une seule instance d'une classe. L'exemple le plus courant de ceci est une connexion de base de données. La mise en œuvre de ce modèle permet à un programmeur de rendre cette instance unique facilement accessible. par de nombreux autres objets. "


0 commentaires

1
votes

Je ne peux pas penser à un tout aussi simple. C'est simple et fiable. Je suppose que vous avez oublié le global là, mais sinon cela devrait bien fonctionner.


0 commentaires

10
votes

Juste pour la clarté du code, je ferais quelque chose comme ceci: xxx


0 commentaires

1
votes

Cela dépend beaucoup du contexte et la raison pour laquelle vous souhaitez que la fonction soit appelée une seule fois.

Si votre fonction est là pour initialiser quelque chose ou commencer quelque chose, votre approche est bonne. Une autre chose que vous pourriez faire, si vous initialisez quelque chose, c'est de tester si ce que vous voulez initialiser existe ou non. xxx

si vous utilisez ces fonctions comme rappel Quelque chose, vous pouvez utiliser la déclaration de Lambda au lieu de déclarer une fonction. Cela garantira que votre fonction ne s'appelle que de certains endroits. xxx


0 commentaires

0
votes

Je sais que la question est vieille, mais j'aime ma solution et je veux le partager. XXX


0 commentaires

0
votes

Si vous utilisez une session, cela peut vous aider.

// PHP
function foo(){    
    
    if(isset($_SESSION['foo_was_called']))
    {
       return false;
    }
    
    $_SESSION['foo_was_called'] = true;
  
    // your code ...
}


0 commentaires