IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mettre une fonction en variable c'est possible?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut Mettre une fonction en variable c'est possible?
    j'ai une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function mafct($mot){
    echo $mot;
    }
    depuis mon fichier test.php normalement j' appelle la fonction mafct comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $mot="bonjour";
    mafct($mot)
    mais j'aimerais savoir si c'est possible de mettre mafct() en variable de cette facon et comment l'appeler ensuite .
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    c'est possible, mais il faut que ta fonction renvoie quelque chose sinon ta variable sera initialisée à null :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function mafct($mot){
       echo $mot;
       return true;
    }
     
    $mot = 'bonjour';
    $varfct = mafct($mot);   // $varfct = true

    Après réflexion, peut-être que tu parles des fonctions anonymes de PHP 5.3+
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $mafct = function($mot) 
    {
       echo $mot;
       return true;
    }
     
    $varfct = $mafct($mot);   // $varfct = true

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2011
    Messages : 32
    Points : 54
    Points
    54
    Par défaut
    Bonjour, tout dépend de ce que tu veux récupérer dans ta variable, mais si je suis logique :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function maFct($mot){
        echo $mot;
        return $mot;
    }

    ou

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function maFct($mot){
        echo $mot;
        return true;
    }

    ensuite
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $mavar = maFct($mot);

    Edit : Arf, un peu en retard

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    En PHP il est tout à fait possible d'appeller une fonction au travers d'une variable qui contiens son nom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function fct ($a,$b,$c) {
      return ($a + $b) * $c;
    }
     
    $my_function = "fct";
    var_dump( $my_function(1,2,3) ); // int 9
    Il est également possible de déclarer dynamiquement des fonctions (on appelle cela des fonctions anonymes ou encore des closures):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // PHP 5.3
    $my_function = function ($a,$b,$c) {
      return ($a + $b) * $c;
    };
     
    var_dump( $my_function(1,2,3) ); // int 9
     
    // PHP < 5.3
    $my_function = create_function('$a,$b,$c', 'return ($a + $b) * $c;');
     
    var_dump( $my_function(1,2,3) ); // int 9
    Enfin, il est possible d'incorporer ces fonctions dans des objets pour les décorer, voici un exemple: CallbackFilterIterator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class CallbackFilterIterator extends FilterIterator {
     
    	protected $_callback;
     
    	public function accept () {
    		$cl = $this->_callback;
    		return (bool)$cl($this->current());
    	}
     
    	public function __construct (Iterator $iterator, $callback) {
    		if (!is_callable($callback))
    			throw new RuntimeException("Callback is not callable");
     
    		parent::__construct($iterator);
    		$this->_callback = $callback;
    	}
    }
     
    $callback = create_function('$a', 'return $a % 2 == 0;');
    $items = new ArrayIterator(range(1,100));
    $filter = new CallbackFilterIterator($items, $callback);
     
    foreach ($filter as $value) {
    	echo "$value > ";
    }
    Note: en PHP, les fonctions anonymes obéissent au mêmes règles que les fonctions nommés en ce qui concerne le scope.
    Depuis PHP 5.3 et les closures, il est possible de passer manuellement des variables à injecter dans le scope de la fonction avec le mot clé use:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $my_function = function ($a,$b) use ( & $c) {
      return ($a + $b) * $c;
    };
     
    $c = 3;
    var_dump( $my_function(1,2) ); // 9
     
    $c = 2;
    var_dump( $my_function(1,2) ); // 6
    Attention avec la référence à $c dans l'exemple précédent: si l'opérateur de référence est omis, $c sera passé par copie dans la closure et sera donc indépendant des changements éventuels.

    En espérant t'avoir aidé à clarifier la situation.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci à nos experts pour tous ces infos .
    j'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function fct ($a,$b,$c) {
      return ($a + $b) * $c;
    }
     
    $my_function = "fct";
    var_dump( $my_function(1,2,3) ); // int 9
    et ca marche .question pourquoi utiliser var_dump pour lancer la fonction?

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour visualiser ce qu'elle renvoie. On aurait aussi bien pu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a = $my_function(1,2,3);
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Ma fonction renvoie {$my_function(1,2,3)}";

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    A mon avis on a fait tout le tour du sujet.Merci à tous

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Alors pense à

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    j'allais le faire .encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2012, 11h50
  2. Réponses: 15
    Dernier message: 23/01/2010, 11h04
  3. passer une fonction en argument, c'est possible ?
    Par kamouminator dans le forum C
    Réponses: 4
    Dernier message: 10/11/2006, 21h13
  4. Mettre une fonction à dormir
    Par Feeder_Fan dans le forum Général Python
    Réponses: 6
    Dernier message: 16/09/2006, 19h55
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo