Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2012, 22h22   #1
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Par défaut Mettre une fonction en variable c'est possible?

j'ai une fonction
Code :
1
2
3
function mafct($mot){
echo $mot;
}
depuis mon fichier test.php normalement j' appelle la fonction mafct comme ceci:
Code :
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
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 09h00   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,
c'est possible, mais il faut que ta fonction renvoie quelque chose sinon ta variable sera initialisée à null :
Code php :
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 :
1
2
3
4
5
6
7
$mafct = function($mot) 
{
   echo $mot;
   return true;
}
 
$varfct = $mafct($mot);   // $varfct = true
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 09h04   #3
Membre du Club
 
Homme
Développeur Web
Inscription : 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 : 53
Points : 53
Bonjour, tout dépend de ce que tu veux récupérer dans ta variable, mais si je suis logique :
Code php :
1
2
3
4
function maFct($mot){
    echo $mot;
    return $mot;
}

ou

Code php :
1
2
3
4
function maFct($mot){
    echo $mot;
    return true;
}

ensuite
Code php :
$mavar = maFct($mot);

Edit : Arf, un peu en retard
osore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h04   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 010
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 3 010
Points : 5 070
Points : 5 070
Hello

En PHP il est tout à fait possible d'appeller une fonction au travers d'une variable qui contiens son nom:
Code :
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 :
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 :
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 :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h03   #5
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
merci à nos experts pour tous ces infos .
j'ai testé
Code :
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?
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h08   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 010
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 3 010
Points : 5 070
Points : 5 070
Pour visualiser ce qu'elle renvoie. On aurait aussi bien pu faire:
Code :
$a = $my_function(1,2,3);
ou encore
Code :
echo "Ma fonction renvoie {$my_function(1,2,3)}";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h39   #7
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
A mon avis on a fait tout le tour du sujet.Merci à tous
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 12h52   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 010
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 3 010
Points : 5 070
Points : 5 070
Alors pense à
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 13h20   #9
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
j'allais le faire .encore merci
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h41.


 
 
 
 
Partenaires

Hébergement Web