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 :

appeler une fonction perso avec call_user_func [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Points : 12
    Points
    12
    Par défaut appeler une fonction perso avec call_user_func
    bonjour,
    voila j'ai une petite classe de validation pour un formulaire qui me pose problème:
    dans mon html j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <label for="titre0">Nom :</label>
    <input title="Choisissez un titre" id="imagename0" class="validate-alphanum" name="item0[validateEmpty-validatealphanum_titre-0]" type="text">
     
    <label for="legende0">Légende :</label>
    <textarea title="Choisissez une legende" id="imagelegend0" class="validate-alphanum" name="item0[[validateEmpty_legende-0]" type="text"></textarea>
    je voudrais appeler la fonction validateEmpty sur les champs dont l'attribut "name" contient la chaine validateEmpty.

    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
     
    public function validateform($ar_data){
    		foreach($ar_data as $item){
    			if(is_array($item)){
    				foreach($item as $label=>$val){
    					$validation = substr($label,0, strpos($label, '_'));
    					$ar_validation =  split('-', $validation);
    					foreach ($ar_validation as $validatorfunc){
    						return call_user_func('$this->validateEmpty', $val);
     
    					}
    				}	
    			}
    		}
    	}
    dans ma page j'ai le warning suivant :
    Warning: call_user_func($this->validateEmpty) [function.call-user-func]: First argument is expected to be a valid callback


    HELP....

  2. #2
    Membre averti Avatar de onirisme
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Novembre 2004
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 221
    Points : 316
    Points
    316
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    foreach ($ar_validation as $validatorfunc){
        return call_user_func('$this->validateEmpty', $val);
    }
     
    ...
    Commence par enlever les quotes de ton return = return call_user_func($this->validateEmpty, $val);
    Si ça bloque toujours, donne le code de validateEmpty. Elle est située ou cette fonction? C'est une fonction ? $this->validateEmpty? il manque pas les parenthèses?

    Mon Blog : http://www.openwab.com
    Développement Web : Wordpress, HTML, CSS, PHP, jQuery
    Infrastructure : Virtualisation, Stockage, Déduplication

    There are 10 types of people in the world: those who understand binary, and those who don't

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return call_user_func(array($this, 'validateEmpty'), $val);
    Pour appeler une fonction de rappel, on y fait référence ainsi :
    • si c'est une fonction, simplement par son nom
    • si c'est une méthode (d'instance) : array(objet, nom_méthode)
    • si c'est une méthode de classe : array(nom_classe, nom_méthode) ou depuis la version 5.2.3 : 'nom_classe::nom_méthode'

    Enfin, tous les cas sont détaillés dans la documentation (y a encore les namespaces ou les fermetures par exemple introduits par la version 5.3).

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci pour votre aide à tous les deux, maintenant ca marche parfaitement.
    effectivement je suis dans une classe et ma méthode publique sert à appeler les méthodes privées de validation (et plus tard à afficher une erreur en cas de besoin )
    ce qui donne :
    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
    public function validateform($ar_data){
    		foreach($ar_data as $item){
    			if(is_array($item)){
    				foreach($item as $label=>$val){
    					$validation = substr($label,0, strpos($label, '_'));
    					$ar_validation =  split('-', $validation);
    					foreach ($ar_validation as $validatorfunc){
    						return call_user_func(array($this,$validatorfunc),$label,$val);
                                            //$validatorfunc = le nom de la fonction ex: validateEmpty
                                           //$label = le nom du champ posté
                                           //$val = le contenu du champ
     
    					}
    				}	
    			}
    		}
    	}
    avec des méthodes comme validateEmpty($fieldName, $value) dispo dans la même classe.
    Maintenant je peux valider chaque champ en fonction de son attribut name

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

Discussions similaires

  1. Appeler une fonction C avec FCMP
    Par cscerim3 dans le forum SAS Base
    Réponses: 3
    Dernier message: 20/09/2012, 09h57
  2. Appeler une fonction python avec Weave
    Par dks17 dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 03/05/2012, 14h54
  3. Comment appeler une fonction externe avec XPath
    Par ttttnht dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/06/2009, 13h54
  4. Réponses: 4
    Dernier message: 24/08/2007, 15h56
  5. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 16h07

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