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 :

Interpréter le nom d'une fonction en php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut Interpréter le nom d'une fonction en php
    Bonjour,

    Je travaille actuellement sur un projet de création d'un petit CMS tout simple, et me retrouve confrontée à un soucis.

    Voici le topo :

    J'ai une table en BDD "display" dont voici le contenu :

    Cette table liste l'intégralité de mes fonctions (chacune ici ayant pour rôle d'appeller un widget), leur ordre, leur endroit d'appartion, et leur apparition.

    J'ai donc ensuite essayé de créer une fonction qui me permettra d'appeller toutes les fonctions qui doivent être affichées par région.

    Voici la fonction que j'ai pour l'instant codée pour l'affichage des widgets dans la colonne latérale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	function display_aside_widgets() {
     
    		echo '<aside>';	
     
    		$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    		while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    		{
    			echo $widget_to_display->displayFunction ;
    		}
     
    		echo '</aside>';
    	}
    Bref, j'espère avoir bien exposé le contexte, venons-en maintenant à mon soucis .

    Il se situe dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $widget_to_display->displayFunction
    Pour l'instant j'ai affiché le résultat de mes fonctions par un echo (pour vérifier que ma fonction fonctionne bien). En revanche, je cherche à écrire en PHP le nom de cette fonction pour qu'elle soit appelée en PHP.

    En clair, j'ai besoin que cette fonction m'affiche, dans la page HTML où elle est appelée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <aside>
    Mon widget catégories
    Mon widget articles
    etc
    </aside>
    Pour cela, j'imagine que c'est dans mon fichier comprenant mes fonctions qu'il faut que ces fonctions soient appelées, mais je ne sais pas comment procéder.

    Bref, si quelqu'un à une idée, je le venererais tel un Dieu .

    Merci d'avance !

    EDIT : Au besoin, je peux rajouter le ";" au nom de mes fonctions dans ma table.

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Essaye comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    {
        $taClasse = new TaClasse(); // Classe contenant les fonctions enregistrées dans ta tabme
        $displayFunction = $widget_to_display['displayFunction'];
        $taClasse->$displayFunction;
    }

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Bonsoir et merci à toi de ta réponse.
    Cependant, je suis une m**** en POO (je sors pour le jeu de mots ...), donc, bien évidemment, cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Class 'myWidget' not found in /opt/lampp/htdocs/cms/includes/functions.php on line 10
    Dois-je déclarer autre part la création de cette classe ?

    Voici mon code actuel avec les modifications que tu m'a suggéré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function display_aside_widgets() {
     
    	echo '<aside>';	
     
    	$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    	while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    	{
    		$myWidget = new myWidget(); // Classe contenant les fonctions enregistrées dans la table
      		$displayFunction = $widget_to_display['displayFunction'];
        		$myWidget->$displayFunction;
    	}
     
    	echo '</aside>';
    }
    Merci d'avance

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Ta classe est dans un autre fichier ?
    Si oui tu doit inclure ce fichier avant d'instancier la classe

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Euh non en fait mon code se résume à ca.
    Je disais : je n'y connais rien

  6. #6
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par Pauloscorps Voir le message
    Euh non en fait mon code se résume à ca.
    Je disais : je n'y connais rien
    Mais elles sont ou les fonctions widget_categories(), widget_latest_articles(), etc... que tu à en base de données ?

  7. #7
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Oh pardon, j'avais mal compris.
    Toutes mes fonctions se trouvent dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .../RACINE_DE_MON_SITE/includes/functions.php
    Au cas où, voici le contenu de ce fichier :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php 
     
    	function display_aside_widgets() {
     
    		echo '<aside>';	
     
    		$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    		while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    		{
    			$myWidget = new myWidget(); // Classe contenant les fonctions enregistrées dans la table
      			$displayFunction = $widget_to_display['displayFunction'];
        			$myWidget->$displayFunction;
    		}
     
    		echo '</aside>';
    	}
     
     
    	function widget_categories() {
     
    		echo '<div id="widget_categories" class="block"><h3> Categories </h3><ul>';
     
    		$request_widget_categories = mysql_query("SELECT * FROM categories WHERE categoryParentID=0 ;"); 
    		while ($category = mysql_fetch_object($request_widget_categories)) 
    		{
    			echo '<li><a href="#" title="' . $category->categoryName . '">' . $category->categoryName . '</a></li>';
    		}
     
    		echo '</ul></div>';
    	}
     
     
    	function widget_latest_articles() {
     
    		echo '<div id="widget_latest_articles" class="block"><h3> Latest posts </h3><ul>';
     
    		$request_widget_latest_articles = mysql_query("SELECT * FROM articles ORDER BY articleDate LIMIT 5 ;");
    		while ($latest_articles = mysql_fetch_object($request_widget_latest_articles)) 
    		{
    			echo '<li><a href="#" title="' . $latest_articles->articleTitle . '">' . $latest_articles->articleTitle . '</a></li>';
    		}
     
    		echo '</ul></div>';
    	}
     
     
    	function widget_latest_comments() {
     
    		echo '<div id="widget_latest_comments" class="block"><h3> Latest comments </h3><ul>';
     
    		$request_widget_latest_comments = mysql_query("SELECT * FROM comments ORDER BY commentID DESC LIMIT 5 ;");
    		while ($latest_comments = mysql_fetch_object($request_widget_latest_comments)) 
    		{
    			echo '<li>By <a href="#" title="#">' . $latest_comments->commentAuthorName . '</a> in <a href="#" title="#">' . $latest_comments->commentArticleID . '</a></li>';
    		}
     
    		echo '</ul></div>';
    	}
     
    ?>

  8. #8
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    OK, dans ce cas utilise $this :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function display_aside_widgets() {
     
    		echo '<aside>';	
     
    		$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    		while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    		{
    			$displayFunction = $widget_to_display['displayFunction'];
        			$this->$displayFunction;
    		}
     
    		echo '</aside>';
    	}

  9. #9
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Bon et bien a priori c'est pas mieux .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Cannot use object of type stdClass as array in /opt/lampp/htdocs/cms/includes/functions.php on line 10

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    vire les parenthèses et fait un call_user_func

  11. #11
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Merci de ta réponse stealth35, mais où est-ce que je dois rajouter call_user_func ?

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Pauloscorps Voir le message
    Merci de ta réponse stealth35, mais où est-ce que je dois rajouter call_user_func ?
    au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$displayFunction;
    fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func($this, $displayFunction);
    si ta bien viré les parenthèses



    de plus ton erreur est parce que tu fais mysql_fetch_object, au lieu de mysql_fetch_assoc

  13. #13
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Merci de ta réponse.

    Donc du coup j'ai enlevé les parenthèses au nom de mes fonctions dans ma BDD, qui se retrouve maintenant sous la forme : widget_categories .

    J'ai ensuite entré le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function display_aside_widgets() {
     
    	echo '<aside>';	
     
    	$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    	while ($widget_to_display = mysql_fetch_assoc($request_display_aside_widgets))
    	{
    		$displayFunction = $widget_to_display['displayFunction'];
    		call_user_func($this, $displayFunction);
    	}
     
    	echo '</aside>';
    }
    Qui me retourne les nombreuses erreurs suivantes :
    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in /opt/lampp/htdocs/cms/includes/functions.php on line 11

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    oui pardon c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func(array($this, $displayFunction));
    essaye aussi avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$displayFunction

  15. #15
    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
    Citation Envoyé par stealth35 Voir le message
    essaye aussi avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$displayFunction
    Tu as omis les parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$displayFunction();

  16. #16
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Merci à tous pour vos réponses. Mon problème n'est malheureusement toujours pas résolu .

    Avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($widget_to_display = mysql_fetch_assoc($request_display_aside_widgets))
    {
    	$displayFunction = $widget_to_display['displayFunction'];
    	$this->$displayFunction();
    }
    J'obtiens :
    Fatal error: Using $this when not in object context in /opt/lampp/htdocs/cms/includes/functions.php on line 11
    Avec la même fonction mais mysql_fetch_object j'obtiens :
    Fatal error: Cannot use object of type stdClass as array in /opt/lampp/htdocs/cms/includes/functions.php on line 10

    Avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($widget_to_display = mysql_fetch_assoc($request_display_aside_widgets))
    {
    	$displayFunction = $widget_to_display['displayFunction'];
    	call_user_func(array($this, $displayFunction));
    }
    Là, c'est la cata :

    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Notice: Undefined variable: this in /opt/lampp/htdocs/cms/includes/functions.php on line 11

    Warning: call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /opt/lampp/htdocs/cms/includes/functions.php on line 11
    Toujours le bordel donc... Quelqu'un aurait une idée ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Pauloscorps Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$displayFunction();
    $this fait référence à l'objet courant dans lequel tu te trouve or il semblerait que ton code ne soit pas à l'interieur d'un objet.

    Cela fait vraiment longtemps que je ne dev plus pour le web mais à l'epoque on pouvais faire appel à une fonction dénotée par une variable en doublant le dollar.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function maFonction ($str) { echo $str; }
    $v = "maFonction";
    $$v("Bonjour"); // Affiche "Bonjour"
    Si je comprend bien tes fonctions sont dans ta bd et tu souhaites faire appel à elles. donc un simple ${$a->target}() devrait te permettre d'exécuter ta fonction.
    Il faudra alors penser à enlever les () dans ta bdd si c'est ce que tu souhaites faire.

    Dans ton premier message quelque chose du genre ${$widget_to_display->displayFunction}() ou essaies avec des parenthèses en place des accolades pour voir.

  18. #18
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Bonsoir et merci infiniment de ta réponse, qui apparement, serait une solution à mon problème.

    Voici les erreurs que j'obtiens :
    Notice: Undefined variable: widget_random_image in /opt/lampp/htdocs/cms/includes/functions.php on line 20

    Fatal error: Function name must be a string in /opt/lampp/htdocs/cms/includes/functions.php on line 20
    Le widget "widget_random_image" est le premier qui doit être affiché, il semblerait donc qu'il soit bien appelé. En revanche, j'ai comme l'impression qu'il n'est pas appelé correctement (je pensais à une chose toute bête, mais le point virgule à la fin de chaque fonction n'est pas ajouté il me semble ?).

    Aurais-je un moyen de voir le code éxécuté pour le corriger ?

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function display_aside_widgets() {
     
    	$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    	while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    	{ 
    		${$widget_to_display->displayFunction}();
    	}
    }

    EDIT : Après avoir relu les messages d'erreurs, j'ai comme l'impression que ma fonction est interprétée comme une variable, comme si les accolades ne servaient à rien...

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    En effet hier j'ai été assez vite dans ma reponse.
    Ma solution était une référence à une référence de fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function maFonction ($str) { echo $str; }
    $var = "maFonction";
    $x = "var"
    $$x("Bonjour"); // Affiche "Bonjour"
    le $$ permet de faire référence à une variable $maFonction qui n'existe pas.
    Je te conseil donc ces solutions non testé mais l'une d'elle devrai fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $widget_to_display->{displayFunction}() // Pas sûr 
    {$widget_to_display->displayFunction}() // Pas sûr
    // Si tu es dans une class
    $this->{$this->displayFunction}() // fonctionne
    Le problème est juste que je ne sais pas dans quel contexte tu te trouve dans ce code.
    Au pire tu utilises call_user_func. Example d'utilisation :
    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
    <?php
    function increment(&$var)
    {
        $var++;
    }
     
    $a = 0;
    call_user_func('increment', &$a); // si tu n'a pas de paramètre remplace &$a par array() (car array() retourne une reference vide) 
    echo $a."\n";  // t'affiche 1
     
    // Pas testé ---
    call_user_func_array('increment', array(&$a)); 
    // Vous pouvez utiliser ceci à la place jusqu'en PHP 5.3
    echo $a."\n"; 
    ?>
    N'hésites pas à visiter le site php.net il est vraiment complet avec de nombreux exemples et la chance d'avoir beaucoup de documentation en français. A l'époque c'est là bas que je trouvais réponse à mes questions.

    EDIT : Après avoir relu les messages d'erreurs, j'ai comme l'impression que ma fonction est interprétée comme une variable, comme si les accolades ne servaient à rien...
    Oui les messages d'erreur sont habituellement très parlant en php contrairement à d'autres...

  20. #20
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Zuymanto, j'ai le bonheur de t'annoncer que tu es mon nouveau Dieu .
    Merci infiniment, cela marche enfin !

    Pour info, voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function display_aside_widgets() {
     
    	$region = "aside";
     
    	$request_display_aside_widgets = mysql_query("SELECT * FROM display WHERE displayShow=1 and displayRegion='aside' ORDER BY displayOrder ASC;");
    	while ($widget_to_display = mysql_fetch_object($request_display_aside_widgets))
    	{ 
    		call_user_func("$widget_to_display->displayFunction", array());
    	}
    }
    Merci également à tout ceux qui ont répondus à ce sujet, vous m'avez tous étés d'une grande aide !

    Ce sujet est donc résolu (encore merci ).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  2. Réponses: 11
    Dernier message: 06/11/2006, 22h51
  3. [FAQ][VBA-E] Traduire le nom d'une fonction excel
    Par SfJ5Rpw8 dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/09/2006, 10h18
  4. test sur le nom d'une fonction
    Par Art19 dans le forum C
    Réponses: 6
    Dernier message: 26/06/2006, 18h29
  5. [Tableaux] Oubli du nom d'une fonction
    Par Ekimasu dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2006, 10h50

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