Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 29/11/2010, 11h02   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
Par défaut Declaration de classe PHP5

Bonjour,

Avant de poser ma question je vous montre ces deux bouts de code ayant le meme resultat (fonctionnent tous les deux bien, pas d'erreur) en local.

Premiere code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 class Voiture{
 	var $couleur;
 	function Voiture(){
 		$this->couleur = 'rouge';
 		}
 	function changer_couleur($nv_couleur){
 		$this->couleur = $nv_couleur;
 		echo '<br />la couleur de votre voiture est maintenant: ',$this->couleur; 		
 		}
 }
 
 $mercedes = new Voiture();
 echo 'le couleur de votre voiture est: ',$mercedes->couleur;
 $mercedes->changer_couleur('blanche');
?>
deuxieme code


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 class Voiture{
 	var $couleur='rouge';
 	function changer_couleur($nv_couleur){
 		$this->couleur = $nv_couleur;
 		echo '<br />la couleur de votre voiture est maintenant: ',$this->couleur; 		
 		}
 }
 
 $mercedes = new Voiture;
 echo 'le couleur de votre voiture est: ',$mercedes->couleur;
 $mercedes->changer_couleur('blanche');
?>


Personnailement je me suis penché vers le deuxieme, pensant qu'il est plus simple surtout que toute les instance de ma classe auront au depart la meme couleur (je ne vois pas l'interet du constructeur). Mais je suis debutant et je peux bien me trompé, alors je me tourne vers vous pour confirmer ce que je pense ou bien le corriger, aussi pour savoir si mon code est optimal et respecte les standard sinon une proposition ou plutot une correction serait la bienvenue surtou avec des explications.


Merci d'avance pour les gens qui essayeront de m'aider.
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 11h16   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
c'est des classes PHP 4 ca
en 5 c'est :

Code :
1
2
3
4
5
6
7
8
9
10
class Voiture
{
    private $_couleur = 'rouge';
 
    public function changer_couleur($nv_couleur)
    {
        $this->couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 11h59   #3
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
Merci pour la réponse, je viens d'essayer votre suggestion mais le code ne fonctionne pas bien voici le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Voiture
{
    private $_couleur = 'rouge';
 
    public function changer_couleur($nv_couleur)
    {
        $this->couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
}
 
 $mercedes = new Voiture;
 echo 'le couleur de votre voiture est: ',$mercedes->couleur;
 $mercedes->changer_couleur('verte');
?>
et voici le résultat:
Code :
1
2
le couleur de votre voiture est:
la couleur de votre voiture est maintenant: rouge
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 12h55   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 271
Points : 7 271
Bonjour,

$_couleur est déclaré private donc tu ne dois pas avoir accès avec $mercedes->couleur.
Citation:
$mercedes = new Voiture;
Code :
$mercedes = new Voiture();
A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 13h01   #5
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Code :
1
2
3
 $mercedes = new Voiture();
 echo 'le couleur de votre voiture est: ',$mercedes->_couleur;
 $mercedes->changer_couleur('verte');
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/11/2010, 13h11   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 271
Points : 7 271
Citation:
Envoyé par andry.aime Voir le message
$_couleur est déclaré private donc tu ne dois pas avoir accès avec $mercedes->couleur.
Citation:
Envoyé par syl2095 Voir le message
Code :
echo 'le couleur de votre voiture est: ',$mercedes->_couleur;
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 13h27   #7
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 834
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 834
Points : 3 312
Points : 3 312
Code :
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
class Voiture
{
    private $_couleur;
 
    public function __construct() 
    {
	$this->_couleur = 'rouge';
    }
 
    public function changer_couleur($nv_couleur)
    {
        $this->couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
 
	public function get_couleur()
	{
		return $this->_couleur;
	}
 
}
 
 $mercedes = new Voiture;
 echo 'le couleur de votre voiture est: ',$mercedes->get_couleur();
 $mercedes->changer_couleur('verte');
Pour récupérer la couleur (qui est déclarée privée) il faut passer par un getter (méthode retournant la valeur).
C'est histoire de gout , mais je suis plus partisan d'utiliser le constructeur pour initialiser les variable plutôt que de le faire directement dans la déclaration.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 13h45   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
Citation:
Envoyé par grunk Voir le message
C'est histoire de gout , mais je suis plus partisan d'utiliser le constructeur pour initialiser les variable plutôt que de le faire directement dans la déclaration.
Arrive un moment ou tu vas avoir des problème se sérialisation, y'a des moments ou ca passe pas par __construct, et niveau Doc c'est pas top non plus
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 13h48   #9
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Citation:
Envoyé par andry.aime Voir le message
oui mais comme ça, on a une erreur Fatal error: Cannot access private property Voiture::$_couleur ...

c'est plus parlant
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/11/2010, 13h59   #10
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
après cette modification:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Voiture
{
    private $_couleur = 'rouge';
    public function changer_couleur($nv_couleur)
    {
        $this->couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
}
 $mercedes = new Voiture();
 echo 'le couleur de votre voiture est: ',$mercedes->_couleur;
 $mercedes->changer_couleur('verte');
?>>
J'obtient ceci:

Citation:
le couleur de votre voiture est:
Fatal error: Cannot access private property Voiture::$_couleur in C:\xampp\htdocs\azerty\index.php on line 12

PS: la ligne 12 correspond a celle ci:
Code :
 echo 'le couleur de votre voiture est: ',$mercedes->_couleur;
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h05   #11
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 271
Points : 7 271
Citation:
Envoyé par andry.aime Voir le message
$_couleur est déclaré private donc tu ne dois pas avoir accès avec $mercedes->couleur.
Et grunk a aussi proposé une correction.
comme si tu n'as pas lu tous les post .

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h34   #12
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
En essayant la correction de grunk (un copier coller du code, j'évite de le réécrire pour éviter le flood) j'ai eu ce résultat:

Citation:
le couleur de votre voiture est: rouge
la couleur de votre voiture est maintenant: rouge
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h37   #13
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 271
Points : 7 271
Code :
1
2
3
4
5
 public function changer_couleur($nv_couleur)
    {
        $this->_couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h05   #14
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
Merci la classe fonctionne très bien avec ce code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Voiture
{
    private $_couleur;
    public function __construct() 
    {
	$this->_couleur = 'rouge';
    }
    public function changer_couleur($nv_couleur)
    {
        $this->_couleur = $nv_couleur;
    	echo '<br />la couleur de votre voiture est maintenant: ', $this->_couleur;	
    }
	public function get_couleur()
	{
		return $this->_couleur;
	}
}
 $mercedes = new Voiture;
 echo 'le couleur de votre voiture est: ',$mercedes->get_couleur();
 $mercedes->changer_couleur('verte');
 ?>
Une dernière question, est ce que le nom d'une propriété doit toujours commencer par un $_ pour respecter les normes, parce que j'ai essayer $couleur à la place de $_couleur, et ça a fonctionné sans problème.

Merci d'avance.
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h16   #15
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 834
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 834
Points : 3 312
Points : 3 312
Citation:
Une dernière question, est ce que le nom d'une propriété doit toujours commencer par un $_ pour respecter les normes, parce que j'ai essayer $couleur à la place de $_couleur, et ça a fonctionné sans problème.
L'underscore (_) est utilisé pour dire d'une variable ou d'une méthode qu'elle est privée. Mais c'est juste cosmétique , tu appelle tes variables comme bon te semble.
C'est comme pour ceux qui préfixe leur variable avec un i quand c'est un int , o pour objet , etc ... Ca marche sans , ca aide juste à voir rapidement à quoi on à a faire dans le code sans devoir remonté au déclaration des variables.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h35   #16
Candidat au titre de Membre du Club
 
Étudiant
Inscription : août 2009
Messages : 44
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2009
Messages : 44
Points : 11
Points : 11
Merci beaucoup pour les explications et la correction
sim0m0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h08.


 
 
 
 
Partenaires

Hébergement Web