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 :

debut en objet


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut debut en objet
    Bonjour

    j'essaye de ma former à l'objet, je pensais avoir à peu près compris, mais apparement non.
    je sus le cours d'open class room sur le php objet, j'en suis au chapitre manipulation de données stockées,

    j'essaye de reproduire l'exemple mais rien ne s'affiche. J'imagine que mes objets ne sont pas correctement remplis mais je ne ne vois pas ou.

    La manière procédurale affichée en dessous fonctionne.
    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
    <?php
    include_once'perso2.class.php';
     
    $bdd = new PDO('mysql:host=localhost;dbname=objet;charset=utf8', 'root', '');
     
     
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    // On admet que $db est un objet PDO.
    $request = $bdd->query('SELECT id, nom, forcePerso, degats FROM personnages');
     
    while ($donnees = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera récupérée et placée dans un array.
    {
      // On passe les données (stockées dans un tableau) concernant le personnage au constructeur de la classe.
      // On admet que le constructeur de la classe appelle chaque setter pour assigner les valeurs qu'on lui a données aux attributs correspondants.
      $perso = new Personnage($donnees);
     
      echo"l'id",$perso->id(), $perso->nom(), ' a ', $perso->forcePerso(), ' de force, ', $perso->degats(), ' de dégâts, ';
    }
     
    echo"<h1> methode procédurale </h1>";
    $request = $bdd->query('SELECT   FROM personnages');
    while ($perso = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera récupérée et placée dans un array.
    {
      echo $perso['nom'], ' a ', $perso['forceperso'], ' de force, ', $perso['degats'], ' de dégâts, ';
    }
    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
    <?php
    class Personnage
    {
      private $_id;
      private $_nom;
      private $_forceperso;
      private $_degats;
     
      // Un tableau de données doit être passé à la fonction (d'où le préfixe « array »).
      public function hydrate(array $donnees)
      {
       if (isset($donnees['id']))
       {
        $this->setId($donnees['id']);
      }
     
      if (isset($donnees['nom']))
      {
        $this->setNom($donnees['nom']);
      }
      if (isset($donnees['forceperso']))
      {
        $this->setNom($donnees['forceperso']);
      }
       if (isset($donnees['degats']))
      {
        $this->setNom($donnees['degats']);
      }
    }
     
    public function id() { return $this->_id; }
    public function nom() { return $this->_nom; }
    public function forcePerso() { return $this->_forceperso; }
    public function degats() { return $this->_degats; }
     
     
      // Liste des setters
     
    public function setId($id)
    {
        // On convertit l'argument en nombre entier.
        // Si c'en était déjà un, rien ne changera.
        // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près, mais rien d'important ici).
      $id = (int) $id;
     
        // On vérifie ensuite si ce nombre est bien strictement positif.
      if ($id > 0)
      {
          // Si c'est le cas, c'est tout bon, on assigne la valeur à l'attribut correspondant.
        $this->_id = $id;
      }
    }
     
    public function setNom($nom)
    {
        // On vérifie qu'il s'agit bien d'une chaîne de caractères.
      if (is_string($nom))
      {
        $this->_nom = $nom;
      }
    }
     
    public function setForcePerso($forcePerso)
    {
      $forcePerso = (int) $forcePerso;
     
      if ($forcePerso >= 1 && $forcePerso <= 100)
      {
        $this->_forcePerso = $forcePerso;
      }
    }
     
    public function setDegats($degats)
    {
      $degats = (int) $degats;
     
      if ($degats >= 0 && $degats <= 100)
      {
        $this->_degats = $degats;
      }
    }
     
    public function setNiveau($niveau)
    {
      $niveau = (int) $niveau;
     
      if ($niveau >= 1 && $niveau <= 100)
      {
        $this->_niveau = $niveau;
      }
    }
     
    public function setExperience($experience)
    {
      $experience = (int) $experience;
     
      if ($experience >= 1 && $experience <= 100)
      {
        $this->_experience = $experience;
      }
    }
    }
    ?>

  2. #2
    Membre chevronné
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo"l'id",$perso->id(), $perso->nom(), ' a ', $perso->forcePerso(), ' de force, ', $perso->degats(), ' de dégâts, ';
    Bonjour,

    id, nom, forcePerso... sont des propriétés de ton objet, pas des fonctions, donc $perso->forcePerso() devrais te provoquer un gros message d'erreur, et ce n'est pas étonnant que rien ne s'affiche. (en plus pour concaténer des chaînes e caracère en php, on utilise le point... et fait attention aux mélanges entre " et ')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo " l'id $perso->id, $perso->nom,  a  $perso->forcePerso de force, $perso->dégats de dégâts ';
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo " l'id ". $perso->id .", ". $perso->nom .",  a  ". $perso->forcePerso ." de force, ". $perso->degats ."de dégâts ";
    EDIT: OK j'ai survolé un peu trop le code... pour plus de clarté, j'aurais tendance, au lieu de définir une fonction comme celle-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function id() { return $this->_id; }
    comme tu as déjà des setId...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function getId() { return $this->_id; }
    mais ce n'est qu'une question de préférence... à part ça, ben essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo " l'id ". $perso->id() .", ". $perso->nom() .",  a  ". $perso->forcePerso() ." de force, ". $perso->degats() ."de dégâts ";
    toujours rien ? à ce moment-là, fait un petit var_dump ou print_r sur $donnees et voir si c'est bien $$donnees qu'il faut envoyer à ton objet ou $donnees[i] (ou i est 0, 1, 2, 3....)

  3. #3
    Membre chevronné
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Par défaut
    Ok, je t'ai dit une autre bétise dans mon message. Après vérification, j'ai vu que l'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Cette ', 'chaîne ', 'a été ', 'faite ', 'avec plusieurs paramètres.';
    était tout à fait correcte, ce que j'ignorais... au temps pour moi.

  4. #4
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Tu construis ton objet par $perso = new Personnage($donnees); mais je n'ai pas vu de constructeur dans ta classe. En revanche, tu as une méthode d'hydratation (autrement dit de remplissage)
    Le plus simple est donc de construire l'objet vide et d'appeler ensuite ta méthode hydrate dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $perso = new Personnage();
    $perso->hydrate($donnees);
    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]

  5. #5
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut
    Citation Envoyé par kalimukti Voir le message
    echo 'Cette ', 'chaîne ', 'a été ', 'faite ', 'avec plusieurs paramètres.';
    [/CODE]
    Ok kalimukti je l'ignorais également avant de regarder le tuto d'open classroom.

    merci Celira en appelant l'hydratation ça fonctionne, je vais regarder ce constructeur que je n'ai pas fait

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

Discussions similaires

  1. [Débutant] même objet pour plusieurs servlets
    Par Vrylx dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/06/2006, 18h31
  2. [c#][debutant] manipuler objets du cache de ie
    Par orelero dans le forum Windows Forms
    Réponses: 9
    Dernier message: 11/12/2005, 22h36
  3. [JSP][Debutant]recuperer un objet d'une page a l'autre
    Par zozolh2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/05/2004, 11h25
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 03h28
  5. Réponses: 3
    Dernier message: 09/02/2003, 02h09

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