Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/01/2012, 07h17   #1
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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 :
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?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h11   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h22   #3
Membre Expert
 
Avatar de Atomya Rise
 
Femme Emilie Lefol
En recherche d'emploi
Inscription : février 2009
Messages : 411
Détails du profil
Informations personnelles :
Nom : Femme Emilie Lefol
Âge : 26
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : En recherche d'emploi
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2009
Messages : 411
Points : 1 277
Points : 1 277
Tu utilises un EOT, il faut donc que tu entoure tes champs par des accolades parce que ce sont des tableaux :

Code :
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;
__________________

Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
Pas de question technique en privé
- Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
- Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)
Atomya Rise est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2012, 10h27   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Citation:
Envoyé par Atomya Rise Voir le message
Tu utilises un EOT
Heredoc
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2012, 10h28   #5
Membre Expert
 
Avatar de Atomya Rise
 
Femme Emilie Lefol
En recherche d'emploi
Inscription : février 2009
Messages : 411
Détails du profil
Informations personnelles :
Nom : Femme Emilie Lefol
Âge : 26
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : En recherche d'emploi
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2009
Messages : 411
Points : 1 277
Points : 1 277
Citation:
Envoyé par stealth35 Voir le message
Heredoc
En effet
__________________

Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
Pas de question technique en privé
- Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
- Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)
Atomya Rise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 16h38   #6
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Merci à vous deux!
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 16h47   #7
Responsable Qt & Web sémantique

 
Avatar de dourouc05
 
Homme Thibaut Cuvelier
Étudiant
Inscription : août 2008
Messages : 16 325
Détails du profil
Informations personnelles :
Nom : Homme Thibaut Cuvelier
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : août 2008
Messages : 16 325
Points : 49 934
Points : 49 934
Envoyer un message via MSN à dourouc05 Envoyer un message via Yahoo à dourouc05
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 :
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 :
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.
__________________
Le troisième défi Qt !

Vous souhaitez participer aux rubriques Qt ou PyQt/PySide (tutoriels, FAQ, traductions, sources) ? Contactez-moi par MP.

Qt : La FAQ : 200 QR
symfony : sfDoctrineGuard

Pas de question d'ordre technique par MP !
dourouc05 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2012, 16h51   #8
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Hmm je vois je n'étais pas encore au chapitre du constructeur. Je n'ai pas encore bien compris le système de private, protected, var et public. J'ai tout mis en public pour ne pas avoir un problème d'accès à la variable.Merci pour ces astuces thibault!
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 17h16   #9
Responsable Qt & Web sémantique

 
Avatar de dourouc05
 
Homme Thibaut Cuvelier
Étudiant
Inscription : août 2008
Messages : 16 325
Détails du profil
Informations personnelles :
Nom : Homme Thibaut Cuvelier
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : août 2008
Messages : 16 325
Points : 49 934
Points : 49 934
Envoyer un message via MSN à dourouc05 Envoyer un message via Yahoo à dourouc05
Citation:
Envoyé par flozza Voir le message
Merci pour ces astuces thibault!
Sans l pour moi .

var, c'est le mal, à ne pas utiliser (résumé).
private, accès uniquement depuis la classe, rien d'autre. Énormément de choses devraient être en private, tout ce qui n'a pas d'utilité directe aux autres quand on parle de méthodes, tout pour les attributs.
protected, accès pour la classe et les classes filles.
public, accès pour tout le monde, y compris les martiens. C'est très bien pour des méthodes, rien de plus.
__________________
Le troisième défi Qt !

Vous souhaitez participer aux rubriques Qt ou PyQt/PySide (tutoriels, FAQ, traductions, sources) ? Contactez-moi par MP.

Qt : La FAQ : 200 QR
symfony : sfDoctrineGuard

Pas de question d'ordre technique par MP !
dourouc05 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h25.


 
 
 
 
Partenaires

Hébergement Web