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 :

boucler sur une classe utilisant un extends [PHP 5.5]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut boucler sur une classe utilisant un extends
    Bonjour,

    mon problème est assez spécifique donc je vais essayer de détailler au max


    j'ai deux classes distinctes:
    la 1er me servant a afficher une liste de personne selon deux paramètres ($mois/$annee);
    la seconde me servant à afficher des détails sur une personne avec 3 parametres ($id/$mois/$annee)
    la sortie pour les deux est un pdf fait avec la classe FPDF
    les deux marches sans soucis !

    La construction des classes est assez similaire:
    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
     
     
    require_once '/../classePourMonPdf.php';
    require_once '/../4autresclasses.php';
    require_once '/../fpdf.php';
    require_once '/classe2.php';
     
    class classe1 extends classePourAfficherPdf{
     
    public function NomDeMaClasse($parametres){
    $annee = $parametre['annee'];
    $mois = $parametre['mois'];
    $detail = $parametre['detail']; // true ou false pour savoir si je dois ajouter la seconde classe.
     
    // ici je met mes paramètres pour la construction du pdf
     
    $pdf=new FPDF();
    $pdf->AddPage();
    $this->function2($annee, $mois);
    }
     
    private function function2($annee, $mois){
     
    // ici l'appel à ma BDD avec les paramètres $annee et $mois
    // ici la construction de mon pdf
    //dans mon switch je récupère un tableau avec le $id de toute la liste
     
    if($detail = true){
       foreach($tableau as $id){
          //ici ça coince :aie: je souhaiterais appeler ma 2sd classe pour chaque $id
       }
    }
    }
    voili voila pour la 1er classe, la 2eme est sur le même principe:
    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
     
    require_once '/../classePourMonPdf.php';
    require_once '/../4autresclasses.php';
    require_once '/../fpdf.php';
     
    class classe2 extends classePourAfficherPdf{
     
    public function NomDeMaClasse($parametres){
    $id = $parametre['id'];
    $annee = $parametre['annee'];
    $mois = $parametre['mois'];
    if(array_key_exists('detail', $Parametres)){ // si j'appel directement la classe pour juste avoir le pdf d'une personne
       $detail = $objParametres['detail']; 
    }else{
       $detail = false;
    }
    // ici je met mes paramètres pour la construction du pdf
    if($detail != true){
       $pdf=new FPDF();
       $pdf->AddPage();
    }else{
       $pdf->AddPage();
    }
    $this->function2($id, $annee, $mois);
     
    private function function2($id, $annee, $mois){
    // ici l'appel à ma BDD avec les paramètres $id, $annee et $mois
    // ici la construction de mon pdf
    }
    une solution ? une idée ? une insulte ?
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut
    Bon j'ai créé une solution que je trouve un peu placebo,

    j'ai réuni dans une nouvelle classe les 4 fonctions et en supprimant le paramètre 'detail',

    ça marche parfaitement mais une classe Ctrl+C Ctrl+V de deux autres je trouve ça moche

    Si quelqu'un trouve mieux je suis preneur ...
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Donc la question c'était "comment réunir le code des deux classes en une seule ?" ?

    Au passage if($detail = true){ est toujours vrai, car tu utilises = (affectation) à la place de == (comparaison d'égalité) ou === (comparaison d'égalité stricte).
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut
    bien vu pour le '=', dans mon code je l'avais passé en '!= false' donc je n'avais pas vraiment fait gaffe ^^'

    et pour réunir les deux codes c'est globalement l'idée oui , sauf qu'il faut aussi que je puisse appeler les codes séparément car
    si j'ai besoin de la liste des personnes, je n'ai pas forcément envie d'avoir le listing détaillé de toutes les personnes et
    si je veux avoir le détail d'une personne je n'ai pas besoin d'avoir le listing détaillé de tout le service ça fait des économies d'encre.
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ah, j'avais pas vu le commentaire "ça coince ici". A priori, tu as juste à appeler ta 2e classe là où tu en as besoin. Tu as essayé ? tu as un message d'erreur ?
    Sinon, la solution "une classe, plusieurs fonctions" est parfaitement viable.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut
    si j'envoie dans mon foreach
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $instance->__constructorClasse2($annee, $mois, $id, $detail);
    ma fonction attend juste '$paramètre'

    et donc je pars en erreur
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut
    ...et après une lute acharnée, le hareng n'a pas réu... non rien à avoir

    j'ai réussi à me dépatouiller!

    classe1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //dans mon switch:
    $tableau[]=array( $data['id'], $annee, $mois, $detail, $this->pdf);
     
    //après
    if($detail != 'false'){           
                foreach($tableau as $utilisateur){
                    $instance = new classe2($utilisateur, $annee, $mois, $detail, $this->pdf);
                }        
            }
    classe2:
    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
     
    public function function1Classe2($parametres){
            if(array_key_exists('id', $parametres)){            
                $id = $parametres['id'];
                $annee = $parametres['annee'];
                $mois = $parametres['mois'];
                if(array_key_exists('detail', $parametres)){
                   $detail = $parametres['detail']; 
                }else{
                   $detail = 'false';
                }
            }else{
     
                $id = $parametres[0];
                $annee = $parametres[1];
                $mois = $parametres[2];
                $detail = $parametres[3];
                $this->pdf = $parametres[4];
            }
    Voili Voila pu de soushi (vous connaissez désormais la fin du hareng )
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2013, 20h49
  2. Fonction non static = code dupliqué ?
    Par titoine1978 dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2007, 23h20
  3. Réponses: 2
    Dernier message: 13/11/2006, 06h42
  4. [Wamp] Appel de fonction non défini
    Par morphine63 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 29/10/2006, 10h02
  5. Réponses: 20
    Dernier message: 21/06/2006, 20h44

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