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 :

Fonction dans une fonction et autres pbs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par défaut Fonction dans une fonction et autres pbs
    Hello

    Voila pour un site de petites annonces, je fais une fonction d'affichage d'annonce que je vous donne pas en entier ici.
    Il y a plusieurs types d'affichages : la visu normale, l'admin (idem + boutons modifier et supprimer), la prévisualisation (boutons différents) etc
    Ils ont tous en gros la même gueule, c'est pour ça que j'en fais une fonction.

    Les boutons de ces affichages ont eux aussi tous la même gueule, ce sont des formulaires qui renvoyent tous les memes valeurs, mais à des scripts diffénrents bien sur.

    A l'intérieur de cette fonction, j'y mets donc une fonction qui crée un bouton.

    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
     
    function Aff_Ann($param, $ligne, $tab_POST, $argSupp=0) {
      // parfois les params arrivent du $_POST, parfois de la BDD ($ligne)
      $texte=""; $nom=""; $prenom="";
      switch ($param) {
        case "showtout" : case "visu" : { $texte = $ligne['MESSAGE']; $nom = $ligne['NOM']; $prenom = $ligne['PRENOM']; $cle = $ligne['CLE']; break; }
        case "previsu" : { echo "fok"; $texte = $tab_POST['iTexte']; $nom = $tab_POST['iNom']; $prenom = $tab_POST['iPrenom']; $cle = $tab_POST['iNumAn']; break; }
        default : {$texte=""; $nom=""; $prenom="";}
      }
     
      if (!isset($passeparla)) {
        function Aff_Bouton($value, $action) { ?>
          <form method="post" action="annoncesadmin.php">
           <input type="hidden" name="iNom" value="<? echo $nom ?>">
           <input type="hidden" name="iPrenom" value="<? echo $prenom ?>">
           <input type="hidden" name="iTexte" value="<? echo $texte ?>">
           <input type="hidden" name="iAction" value="<? echo $action ?>">
           <input type="hidden" name="iNumAn" value="<? echo $cle ?>">
           <input type="submit" name="iOK" value="<? echo $value ?>">
          </form>
        <? }
      }
      static $passeparla = 1; 
     
      // ... ... ...
    }
    pb 1 : la variable statique est censée enpéchér de définir 2 fois la fonction, hors le message d'erreur est tjrs là (fonction Aff_Bouton définie 2 fois)

    pb 2 : à l'intérieur de Aff_Bouton, les variables $cle, $prenom, $nom, $texte sont inconnues alors qu'elles ont été définies dans la fonction mère...
    J'ai plusieurs fois remarqué ce pb : si je définie une variable dans un script, pas moyen de l'utiliser dans les fonctions qu'il contient, pourtant elle devrait être globale...

    Bon vous voyez en gros les pbs j'espère...

    Aidez moi je suis si seul
    Merci

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    tu confonds beaucoup de notions...

    la mention static signifie que tes variables ne sont pas membre d'une instance de classe, mais de la classe toute entière, bien entendu, ceci n'a de sens que dans un context OO (Orienté Objet).

    pour accèder à une variable qui est globale, il te faut soit utiliser la mention global, soit le tableau super global $GLOBALS

    les variables existent certes dans la fonction mère, mais pas dans la fonction fille, pour qu'elles existent dans la fonction fille, il faut les passées en paramètres, tu les définies de manière local à la fonction, donc dès que tu appelles une autre fonction (même une fonction fille !!!) ces variables ne sont plus accessibles (tout comme les variables globales ne sont pas accessibles à partir d'une fonction...)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par défaut
    Merci !
    Tiens je viens de trouver ça, qui dit comme toi, http://fr3.php.net/global
    A part pour static qui a bien aussi un sens hors POO, comme en C quoi. Donc ça devrait marcher mon truc

    Entre parenthèses, dans mon but, ça n'aurait pas trop de sens de tout donner en paramètre à Aff_Bouton, ça complexifierais le truc pour rien, seuls le nom du bouton et "iAction" changent entre 2 boutons. Je vais essayer avec global...
    ps : ça marche pas, $nom, $prenom etc, ne sont ni globales ni locales, c'est le bordel...
    Comment vous feriez à ma place pour obtenir le mm résultat (=ne pas faire apparaitre 10x le mm code)?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par défaut
    up...

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Transmettre variable qui est dans une fonction dans une autre
    Par band22 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/08/2011, 08h06
  3. Réponses: 1
    Dernier message: 14/11/2009, 07h07
  4. Import d'une fonction, dans une fonction
    Par Goupo dans le forum Général Python
    Réponses: 2
    Dernier message: 12/01/2007, 16h50
  5. [PHP-JS] une fonction dans une fonction
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2006, 19h14

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