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 :

POO Début d'apprentissage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut POO Début d'apprentissage
    Bonjour

    Jusque là en php je programmais en procédural, mais j'aimerais exploiter à fond ce language, alors je me lance dans l'objet.Le passage est un peu déconcertant.

    J'apprends en créant des scripts anodins, et je bloque sur le premier..

    Code php : 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
     
    <?php
    class commande {
    	public $client_nom;
    	public $client_prenom;
    	public $contenu;
     
     public function create($nom, $prenom) {
    	 $this->client_nom = $nom;
    	 $this->client_prenom = $prenom;
     }
     
     public function addPizza($pizza, $quantite) {
    	 switch($pizza) {
    	 	case marguerite:
    			$this->contenu[0] = $quantite; 
    		break;
     
    		case royale:
    			$this->contenu[1] = $quantite;
    		break;
    	 }
     }
    }
     
    $commande = new commande();
    $commande->create($_GET['nom'], $_GET['prenom']);
    if($_GET['commander']) {
    	$com = explode("-", $_GET['commander']);
    	$commande->addPizza($com[0], $com[1]);
    }
    echo <<<EOT
    $commande->client_prenom $commande->client_nom a commandé $commande->contenu[0] marguerites et $commande->contenu[1] royales
    <br>Miam !
    EOT;
    ?>

    Mon problème est sur l'array $contenu. Le résultat m'affiche Array[0] et Array[1]. Alors ma question est pourquoi?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    je te conseil de mettre ton niveau d'erreur au maxium (php.ini error_reporting = E_ALL | _STRICT), t'as des erreurs de syntax

    fait plutôt un sprintf que du heredoc

  3. #3
    Membre émérite Avatar de Atomya Rise
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Février 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 443
    Par défaut
    Tu utilises un EOT, il faut donc que tu entoure tes champs par des accolades parce que ce sont des tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo <<<EOT
    $commande->client_prenom $commande->client_nom a commandé {$commande->contenu[0]} marguerites et {$commande->contenu[1]} royales
    <br>Miam !
    EOT;

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Atomya Rise Voir le message
    Tu utilises un EOT
    Heredoc

  5. #5
    Membre émérite Avatar de Atomya Rise
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Février 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 443
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    Heredoc
    En effet

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Merci à vous deux!

  7. #7
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 26 799
    Par défaut
    Puisque ton objectif est d'apprendre la POO, deux remarques sur ton code :
    - les constructeurs, c'est mieux que ce que tu as fait, ça a l'air beaucoup plus naturel et tu es sûr que la méthode de construction est appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class commande {
    	public $client_nom;
    	public $client_prenom;
    	public $contenu;
     
     public function __construct($nom, $prenom) {
    	 $this->client_nom = $nom;
    	 $this->client_prenom = $prenom;
     }
    }
     
    $commande = new commande($_GET['nom'], $_GET['prenom']);
    Avec ton code, qu'on appelle ou pas create(), ton objet est quand même créé, tu n'as aucune certitude que ces champs soient remplis ;
    - ensuite, des champs d'une classe en public... ! Cela viole l'encapsulation. Donc tu passes ça en private et tu mets des getter/setter :
    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
    <?php
    class commande {
    	private $client_nom;
    	private $client_prenom;
    	private $contenu;
     
     public function __construct($nom, $prenom) {
    	 $this->client_nom = $nom;
    	 $this->client_prenom = $prenom;
     }
     
     public function getName() { return $this->client_nom; }
     public function getFirstName() { return $this->client_prenom; }
    }
     
    $commande = new commande($_GET['nom'], $_GET['prenom']);
    Ainsi, tu seras plus proche des principes de l'OO.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

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

Discussions similaires

  1. [PHP 5.0] Mes débuts en POO
    Par dpmix dans le forum Langage
    Réponses: 18
    Dernier message: 15/01/2010, 10h49
  2. Réponses: 18
    Dernier message: 12/11/2009, 09h21
  3. [POO] POO & PHP : Apprentissage
    Par MmoulinexX dans le forum Langage
    Réponses: 10
    Dernier message: 09/03/2009, 16h43
  4. [POO] Mes débuts en OO sur PHP
    Par oranocha dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2008, 17h46
  5. Réponses: 3
    Dernier message: 19/02/2008, 09h24

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