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

PHP & Base de données Discussion :

Généralisation et spécialisation héritage en PHP


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut Généralisation et spécialisation héritage en PHP
    bonjour à tous !

    je suis à recherche d'un script php/mysql qui contient une classe génerique et des sous classes qui héritent de la classe générique qui permet l'ajout, suppression, modification, consultation, des données

    exemple :
    le classe générique publication
    les sous classes livre, conférence, article .

    merci à tous !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    ta question se resume a comprendre comment implémenter les classes en php et le mot clé pour definir l'heritage. Pour cela jette un coup d'oeil dans un tutorial php. look for extends,.....
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  3. #3
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    ca semble une question de travaux pratique ca
    c'est un projet dans ton cours?

    comme l'implémentation de classe tel que tu les veux sont probablement unique...il te faut l'implémenté toi meme...
    si tu veux savoir comment coder de l'héritage en php..il te faut php 5 et google..hmmm non developpez.net (merci guitou12)
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  4. #4
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par ozzmax
    .il te faut php 5 et google
    Moi j'aurai dit php5 et developpez.net
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  5. #5
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    voilà j'ai rectifié le tire...
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par ouatmad
    ta question se resume a comprendre comment implémenter les classes en php et le mot clé pour definir l'heritage. Pour cela jette un coup d'oeil dans un tutorial php. look for extends,.....
    merci de ta réponse et merci aux autres aussi,

    les classes sont déja implémentées, ce que je veux maintenant c 'est de creer un livre ou ajouter un livre dans la table livre en utilisant le principe de l'héritage des méthodes de la classe publication qui est la classe générique.

    merci de me répondre!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par ozzmax
    ca semble une question de travaux pratique ca
    c'est un projet dans ton cours?

    comme l'implémentation de classe tel que tu les veux sont probablement unique...il te faut l'implémenté toi meme...
    si tu veux savoir comment coder de l'héritage en php..il te faut php 5 et google..hmmm non developpez.net (merci guitou12)
    ce n'est pas un tp non plus un projet dans le cours. je suis débutante en oo.

  8. #8
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Suivant ta question ça devrait donner un truc dans ce genre

    Définition de la classe livre

    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
    Class Livre extends Publication
    {
       private $var1;
       public $var2;
     
      function Livre()
      {
         // Le constructeur de la classe Livre, si tu effectues des actions dedans il te faudra au préalable appeler le constructeur de Publication
        $this->Publication(); // Constructeur publication
        //PS: Il existe une autre maniére de nommer les constructeurs mais j'utiliser celle ci pour ma part.
      }
     
      function ma_fonction() { // rien }
     
    }
    Ensuite pour créer un nouveau livre c'est ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $book = new Livre();
    $book->ma_fonction(); // Fonction de la classe livre
    $book->enregistrer(); // Fonction héritée de Publication
    ...
    J'espére que ça aura été utile si tu veux des précisions n'hésite pas !
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    <?php
    include("MySql.php");
     
    class Publication
    {
    var $num_publi;
    var $titre;
    var $date_publi;
    var $langage;
     
     
    // le constructeur permet d'initialiser
    // les variables membres
    function __construct($num_publi,$titre,$date_publi,$langage)
    {
    $this->num_publi =$num_publi;
    $this->titre =$titre;
    $this->date_publi = $date_publi;
    $this->langage = $langage;
    }
    function getnum_publication() { return $this->num_publi;}
    function gettitre_publication() { return $this->titre; }
    function getdat_publi() { return $this->date_publi; }
    function getlangage() { return $this->langage; }
     
     
    function lire( $num_publi )
    {
    $this->num = $num_publi;
     
    if($this->num> 0)
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete = "SELECT Titre_publication,Date_publication,langage FROM publication WHERE num_publication='".$this->num."'";
    $resultat = $bdd->executerRequete( $requete );
    $bdd->deconnecter();
     
    $donnees = $bdd->prochainResultat($resultat);
    $this->titre = $donnees['titre_publication'];
    $this->date_publi = $donnees['date_publication'];
    $this->langage = $donnees['langage'];
    }
    }
     
    function enregistrer()
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete="INSERT INTO publication(titre_publication,Date_publication,langage ) 
    VALUES ('".mysql_escape_string($this->titre)."','".mysql_escape_string($this->date_publi)."',
    '".mysql_escape_string($this->langage)."');";
     
    $bdd->executerRequete( $requete );
     
    $bdd->deconnecter();
    }
     
    function modifier()
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete = "UPDATE publication";
    $requete .= "SET titre_publication='" . mysql_escape_string($this->titre) . "', ";
    $requete .= "Date_publication='" . mysql_escape_string($this->date_publi) . "', ";
    $requete .= "langage='" . mysql_escape_string($this->language) . "' "; 
    $requete .= "WHERE num_publication='" . $this->num_publi . "'"; 
    $bdd->executerRequete( $requete );
     
    $bdd->deconnecter();
    }
     
    function supprimer( $num_publi)
    {
    $bdd = new MySql();
    $bdd->connecter();
    $bdd->executerRequete(" DELETE FROM news WHERE id='".$num_publi."'");
    //$bdd->executerRequete(" DELETE FROM WHERE num_publications='".$num_publi."'");
    $bdd->deconnecter();
    }
     
    function __toString()
    {
    setlocale(LC_TIME, "fr_FR", "FRA");
    $date = strftime("Le %A %d %B %Y ", $this->date);
     
    $ret = "<b><u>".$this->titre . "</u></b><br/>" . nl2br($this->langage) . "<br/>" . $date . " - ";
     
    $ret .= "<br/><br/><br/>";
     
    return $ret;
    }
    }
    ?>
     
    et la classe livre est :
     
    <?
    class Livre extends Publication
    {
    private $editeur;
    private $isbn;
    private $type_livre;
     
     
    function __construct($num_publi, $titre, $date_publi, $langage, $isbn,$editeur,$type_livre)
    {
    $this->editeur = $editeur;
    $this->isbn = $isbn;
    $this->type_livre= $type_livre;
    parent::__construct($num_publi, $titre, $date_publi, $langage);
    }
     
     
    }
    ?>
    voila guitou

    je souhaiterai que quelqu'un jete un coup d'oeil sur ce code et me dire comment appliquer une fonction déclaré dans la classe parent dans une classe fils?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut,

    ben tout betement tu l'appelles comme tu appellerais une fonction déclarée dans la classe fille.

    Mise en garde, sous PHP5, pour acceder aux fonctions et données membres de la classe mère, la portée doit être au minimum "protected" (pas d'accès public mais acces private + accessible au filles).

    A moins que tu veuilles dire que la meme fonction est définie chez la mere et la fille et que tu veux taper celle de la mère, par exemple depuis celle de la fille auquel cas sert toi de l'operateur de resolution de portée ("::") combinée au mot-clé "parent" :

    parent::mafonction();
    il n'y a pas de sotte existence

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Merci de ta réponse!
    dans la classe mere publication(idpublication,titre_publication,date_publi,langage,resume) j'ai la fonction insert qui permet de saisir les attributs de publication qui sont commun à article et livre. comment utiliser cette fonction dans la classe fille pour saisir les attributs spécifique à chaque classe fille?
    livre(idpublication,isbn,edition)
    article(idpublication,stat_rev_pub,revue_pub,num_vol_rev,num_page_pub)
    suis-je claire?

    merci de toute réponse !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut Zana,

    ce qui serait hyper clair ca serait demonter cette ces fonctions. voire tes classes pour pouvpir de te proposer l'organsation la mieux adaptée.
    il n'y a pas de sotte existence

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    Merci gisele de ta réponse, voila mes classes, la classe mère publication
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    include("MySql.php");
     
    class Publication
    {
    var $num_publi;
    var $titre;
    var $date_publi;
    var $langage;
     
     
    // le constructeur permet d'initialiser
    // les variables membres
    function __construct($num_publi,$titre,$date_publi,$langage)
    {
    $this->num_publi =$num_publi;
    $this->titre =$titre;
    $this->date_publi = $date_publi;
    $this->langage = $langage;
    }
    function getnum_publication() { return $this->num_publi;}
    function gettitre_publication() { return $this->titre; }
    function getdat_publi() { return $this->date_publi; }
    function getlangage() { return $this->langage; }
     
     
    function lire( $num_publi )
    {
    $this->num = $num_publi;
     
    if($this->num> 0)
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete = "SELECT Titre_publication,Date_publication,langage FROM publication WHERE num_publication='".$this->num."'";
    $resultat = $bdd->executerRequete( $requete );
    $bdd->deconnecter();
     
    $donnees = $bdd->prochainResultat($resultat);
    $this->titre = $donnees['titre_publication'];
    $this->date_publi = $donnees['date_publication'];
    $this->langage = $donnees['langage'];
    }
    }
     
    function enregistrer()
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete="INSERT INTO publication(titre_publication,Date_publication,langage ) 
    VALUES ('".mysql_escape_string($this->titre)."','".mysql_escape_string($this->date_publi)."',
    '".mysql_escape_string($this->langage)."');";
     
    $bdd->executerRequete( $requete );
     
    $bdd->deconnecter();
    }
     
    function modifier()
    {
    $bdd = new MySql();
    $bdd->connecter();
     
    $requete = "UPDATE publication";
    $requete .= "SET titre_publication='" . mysql_escape_string($this->titre) . "', ";
    $requete .= "Date_publication='" . mysql_escape_string($this->date_publi) . "', ";
    $requete .= "langage='" . mysql_escape_string($this->language) . "' "; 
    $requete .= "WHERE num_publication='" . $this->num_publi . "'"; 
    $bdd->executerRequete( $requete );
     
    $bdd->deconnecter();
    }
     
    function supprimer( $num_publi)
    {
    $bdd = new MySql();
    $bdd->connecter();
    $bdd->executerRequete(" DELETE FROM news WHERE id='".$num_publi."'");
    //$bdd->executerRequete(" DELETE FROM WHERE num_publications='".$num_publi."'");
    $bdd->deconnecter();
    }
     
    function __toString()
    {
    setlocale(LC_TIME, "fr_FR", "FRA");
    $date = strftime("Le %A %d %B %Y ", $this->date);
     
    $ret = "<b><u>".$this->titre . "</u></b><br/>" . nl2br($this->langage) . "<br/>" . $date . " - ";
     
    $ret .= "<br/><br/><br/>";
     
    return $ret;
    }
    }
    ?>

    et la classe fille livre :
    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
     
     
    <?
    class Livre extends Publication
    {
    private $editeur;
    private $isbn;
    private $type_livre;
     
     
    function __construct($num_publi, $titre, $date_publi, $langage, $isbn,$editeur,$type_livre)
    {
    $this->editeur = $editeur;
    $this->isbn = $isbn;
    $this->type_livre= $type_livre;
    parent::__construct($num_publi, $titre, $date_publi, $langage);
    }
     
     
    }
    ?>

Discussions similaires

  1. Multi Héritage en php.
    Par demenvil dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2013, 13h10
  2. [MCD] Spécialisation / Héritage
    Par Invité dans le forum Schéma
    Réponses: 8
    Dernier message: 23/03/2010, 18h25
  3. Réponses: 3
    Dernier message: 25/02/2007, 17h49
  4. pb de spécialisation table (héritage ou autre)
    Par fanette dans le forum Schéma
    Réponses: 3
    Dernier message: 13/11/2006, 23h32
  5. [POO] héritage en php
    Par zana74 dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2006, 09h50

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