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 :

M'initier à l'orienté objet PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut M'initier à l'orienté objet PHP
    Bonjour. J'ai tenté de créer un listage de données sur le principe du MVC qui fonctionne bien.
    Ce topic a pour but de m'initier à l'Orienté Objet. Franchement, j'ai fais beaucoup de lectures
    mais je n'arrive pas à déterminer par où commencer pour appliquer le OO dans mon code.

    J'aurais besoin des incides. Peut-être aussi me dire si je l'ai bon pour le MVC du au moins
    à la base. J'apprends plus par un exemple. Disons, des indices.

    member.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    require(dirname(__FILE__).'/member-config.inc.php');
    require(dirname(__FILE__).'/member-model.inc.php');
    require(dirname(__FILE__).'/member-controller.inc.php');
    require(dirname(__FILE__).'/member-view.inc.php');
    member-config.inc.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    define('DB_SERVEUR', 'localhost');
    define('DB_LOGIN','root');
    define('DB_PASSWORD','pass');
    define('DB_NOM','cms');
    define('DB_TABLE','cms_member');
    define('DB_DSN','mysql:host='. DB_SERVEUR .';dbname='. DB_NOM);
     
    define('MAX_PAR_PAGE', 1);
    member-controller.php:
    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
     
    <?php
     
    //Contrôleur de l'application
     
    // Objets de connexion et de manipulatin de la BDD
    $oPDO = null;
    $oPDOStatement = null;
     
    // Tableau stockant les informations 
    $aInfos = array();
     
    // Tableau stockant les items récupérés de la BDD
    $aListe = array();
     
    // Tableau stockant les erreurs générées
    $aErreurs = array();
     
    // Nombre de ithems enregistrés dans la BDD
    $iNombre = 0;
     
    // Numéro de la page courante
    $iNumeroDePageCourante = 1;
     
    // Offset à partir duquel on récupère les données dans la BDD
    $iOffsetSelection = 0;
     
    // Contrôle de la pagination
    if(!empty($_GET['numeroPage'])
      && is_numeric($_GET['numeroPage'])
      && ($_GET['numeroPage']>1))
    {
      $iNumeroDePageCourante = intval($_GET['numeroPage']);
      $iOffsetSelection = ($iNumeroDePageCourante - 1) * MAX_PAR_PAGE;
    }
     
    // Initialisation de la connexion avec la base de données
    $oPDO = PDOConnect(DB_DSN, DB_LOGIN, DB_PASSWORD);
     
    // Comptage du nombre en base de données
    $oPDOStatement = $oPDO->query('SELECT COUNT(1) AS nombre FROM '. DB_TABLE);
    $oPDOStatement->setFetchMode(PDO::FETCH_ASSOC);
    $aInfos = $oPDOStatement->fetch();
     
    $iNombre = intval($aInfos['nombre']);
     
    // Récupération des items en fonction de la pagination
    if (sizeof($iNombre)>0)
    {
      $oPDOStatement = $oPDO->prepare(
        'SELECT identification,description,creation FROM '. DB_TABLE .' ORDER BY creation DESC LIMIT :offset, '. MAX_PAR_PAGE
      );
     
      $oPDOStatement->bindParam(':offset', $iOffsetSelection, PDO::PARAM_INT);
      $oPDOStatement->execute();
     
      // Récupération des résultats sélectionnés dans le tableau $aListe
      $aListe = $oPDOStatement->fetchAll(PDO::FETCH_OBJ);
    }
     
    // Fermeture de la connexion SQL
    $oPDOStatement = null;
    $oPDO = null;
    member-layout.inc.php:
    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
     
    <!DOCTYPE html>
    <html>
      <head>
        <title><?php echo $title ?></title>
     
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta name="created" content="Thu, 04 Apr 2013 20: 51: 32 GMT">
     
            <link href="member-style.css" rel="stylesheet" type="text/css">
     
      </head>
      <body>
     
        <?php echo $content ?>
     
      </body>
    </html>
    member-model.inc.php:
    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
     
    <?php
     
    /**
     * Ce fichier contient toutes les fonctions
     * utiles à l'application
     **/
     
    function PDOConnect($sDbDsn, $sDbLogin, $sDbPassword)
    {
      try
      {
        $oPDO = new PDO($sDbDsn, $sDbLogin, $sDbPassword);
      }
      catch (PDOException $e)
      {
        die('Une erreur interne est survenue');
      }
     
      $oPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
      return $oPDO;
    }
     
    function paginer($nb_results, $nb_results_p_page, $numero_page_courante, $nb_avant, $nb_apres)
    {
      // Initialisation de la variable a retourner
      $resultat = '';
     
      // nombre total de pages
      $nb_pages = ceil($nb_results / $nb_results_p_page);
      // nombre de pages avant
      $avant = $numero_page_courante > ($nb_avant + 1) ? $nb_avant : $numero_page_courante - 1;
      // nombre de pages apres
      $apres = $numero_page_courante <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $numero_page_courante;
     
     
      // page precedente
      if ($numero_page_courante > 1)
      {
        $resultat .= '<a class="linkPage" href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?numeroPage='. ($numero_page_courante - 1) .'" title="Page précédente '. ($numero_page_courante - 1) . '">&laquo;</a>&nbsp;';
      }
      else
      {
        $resultat .= '<span class="iPage">&laquo;</span>&nbsp;';
      }
     
      // affichage des numeros de page
      for ($i = $numero_page_courante - $avant; $i <= $numero_page_courante + $apres; $i++)
      {
        // page courante
        if ($i == $numero_page_courante)
        {
          $resultat .= '&nbsp;<strong><div class="aPage"><span class="aPageTtl">PAGE <</span>' . $i . '<span class="aPageTtl">> DE '. $nb_pages .'</span></div></strong>&nbsp;';
        }
        else
        {
          $resultat .= '&nbsp;<a class="linkPage" href="'. htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES) .'?numeroPage='. $i .'" title="Consulter la page '. $i . '">' . $i . '</a>&nbsp;';
        }
      }
     
      // page suivante
      if($numero_page_courante < $nb_pages)
      {
        $resultat .= '&nbsp;<a class="linkPage" href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?numeroPage='. ($numero_page_courante + 1) .'" title="Consulter la page '. ($numero_page_courante + 1) . ' !">&raquo;</a>&nbsp;';
      }
      else
      {
        $resultat .= '&nbsp;<span class="iPage">&raquo;</span>';
      }
     
     
      // On retourne le resultat
      return $resultat;
    }
    member-view.inc.php:
    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
     
    <?php $title = "Coin des artistes" ?>
    <?php ob_start(); ?>
     
          <h1>Profils</h1>
     
          <?php if ($iNombre > 0) : ?>
     
            <ul>
              <li><?php echo $iNombre; ?> ARTISTE<?php if ($iNombre > 1) : ?>S<?php endif; ?></li>
            </ul>
     
              <hr>
            <?php foreach ($aListe as $oItem) : ?>
              <div>
                    <?php echo htmlspecialchars($oItem->identification); ?> : 
                    <?php echo htmlspecialchars($oItem->description); ?>
              </div>
              <hr>
            <?php endforeach; ?>
     
            <?php if ($iNombre > MAX_PAR_PAGE) : ?>
              <?php echo paginer($iNombre, MAX_PAR_PAGE, $iNumeroDePageCourante, 0, 0); ?>
            <?php endif; ?>
          <?php else : ?>
          <p>
            Aucun artiste enregistré
          </p>
          <?php endif; ?>
     
    <?php $content = ob_get_clean(); ?>
    <?php require(dirname(__FILE__).'/member-layout.inc.php'); ?>
    J'ai vraiment besoin d'un coup de main. Je ne cherche pas à ce qu'on fasse mon code. Avec le temps, j'ai compris à séparer le PHP de l'affichage. Quoique je ne suis pas certain pour le contrôleur et le modèle. Mais, mon principal but est l'Orienté Objet de base. Merci d'avance.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Je laisse tomber.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  3. #3
    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 : 47
    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
    Salut,

    je ne comprends pas trop ton approche :
    dans POO il y a Objet et dans ton code je ne vois pas où sont les objets.

    Donc pour commencer tu devrais poser les classes qui vont s'occuper de tous les aspects et de les ranger sur leur espace de nom (regarde même sans commentaires c'est explicite) :
    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
    namespace App\Membre
    {
        class Membre
        {
            public static function data()
            {
                return new \App\Membre\Database\Data();
            }
        }
    }
     
     
     
    namespace App\Membre\Database
    {
        class Data
        {
            public function selectById()
            {
     
            }
     
            public function insert()
            {
     
            }
     
            public function update()
            {
     
            }
        }
    }
     
     
     
    namespace App\Membre\Controller
    {
        class Index
        {
            public function launch()
            {
     
            }
        }
     
        class Create
        {
            public function launch()
            {
     
            }
        }
     
        class CreateSubmit
        {
            public function launch()
            {
     
            }
        }
    }
     
     
     
    namespace App\Membre\View
    {
        class Liste
        {
            public function render()
            {
     
            }
        }
     
        class Identification
        {
            public function render()
            {
     
            }
        }
    }
    C'est une approche parmi un grand nombre possible de l'organisation du code et de sa séparation, tout est sujet à discussion mais ça a le mérite de bien tout poser.
    Allez reprends ton code et essaie déjà de la ranger selon cette architecture. Tu peux la changer si tu penses que c'est nécessaire.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 099
    Points : 4 444
    Points
    4 444
    Par défaut
    Citation Envoyé par dancom5 Voir le message
    Ce topic a pour but de m'initier à l'Orienté Objet.
    Bien sur si tu comptes créer un framework MVC pour t'initier aux objets, tu n'as aucune chance.

    Pense plutot au M de MVC, pour débuter en douceur fait toit des classes "utilisateur, personne, action, images, formulaire ...". Essaye de retrouver tes structures complexes et de les regrouper en 1 ou plusieurs objets.
    par exemple la réception d'un formulaire te retourne un "objet" formulaire composé d'objets input.

    -------------------------
    ou alors fais toi un tuto d'un framework MVC (laravel,codeiniter,cake), mais la c'est un plongeon sans garantie. La bien sur tu apprends a utiliser des objets, comprendre leurs fonctionnement
    $moi= ( !== ) ? : ;

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Je trouve que beaucoup de débutants (ceux qui viennent sur Developpez en tout cas) confondent objet et MVC et partent dans tous les sens, puis se découragent et reviennent à la bonne vieille procédurale

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

Discussions similaires

  1. [POO] Utilisation de PHP Orienté Objet
    Par Gibou dans le forum Langage
    Réponses: 7
    Dernier message: 26/11/2006, 02h30
  2. [Debat] Php Orienté Objet et les bibliotheques
    Par kagura dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 21/11/2006, 17h55
  3. [POO] Cours sur le PHP orienté objet
    Par gforce dans le forum Langage
    Réponses: 12
    Dernier message: 06/11/2006, 09h20
  4. [POO] Orienté Objet en PHP
    Par Amine_sas dans le forum Langage
    Réponses: 1
    Dernier message: 15/08/2006, 18h56
  5. [POO] PHP et l'Orienté Objet
    Par kagura dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2006, 18h01

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