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 08/12/2010, 15h14   #1
Membre actif
 
Inscription : mars 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 65
Points : 169
Points : 169
Par défaut affichage String en dynamique (POO)

Bonjour,
Je me remets à PHP depuis peu pour un projet web et m'exerce donc de nouveau sur ce langage. Je tombe sur un problème, je n'arrive pas à afficher un String en attribut privé de classe, alors que celui-ci est très bien affiché dans le cas où je l'affecte à une variable en statique. C'est peut être pas très clair, un bout de code et le résultat sera peut être plus parlant:
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
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
<?php
		/***************************************************
		 *		TEST de création d'une classe simple
		 ***************************************************/
		class maClasse {
 
//			private String $monAttribut = 'valeur par défaut'; // Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE
//			$monAttribut = 'valeur par défaut'; // Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION
			private static $monAttribut = 'valeur par défaut';
			var $unAutreAttribut = 'je sais pas quoi mettre pour que ça marche';
 
			public function setAttribut($param) {
//				$monAttribut = strval($param);				// KO
//				$this->$monAttribut = strval($param);		// KO
// 				$this->$monAttribut = $param;				// KO
//				$monAttribut = $param;						// KO
				$monAttribut = (String)$param;				// KO
			}
 
			// Constructeur
			public function maClasse() {
				$this->setAttribut('Test');
			}
 
			public function afficher() {
				// un test...
				echo "monAttribut vaut : $monAttribut";
				echo '<br>';
				printf("monAttribut vaut : %s \n", $monAttribut);
				echo '<br>';
 
				// un autre test...
				$testDeux = "test !!! qui marche car c'est statique...";
				echo 'testDeux vaut : '.$testDeux.'';
				echo '<br>';
				printf("testDeux vaut : %s \n", $testDeux);
				echo '<br>';
 
				// un autre test avant suicide...
				echo 'unAutreAttribut vaut : '.$unAutreAttribut.'';
				echo '<br>';
				printf("unAutreAttribut vaut : %s \n", $unAutreAttribut);
				echo '<br>';
			}
		}
		/***************************************************
		 *		TEST d'instanciation de la classe
		 ***************************************************/
		$monObjet = new maClasse();
		$monObjet->afficher();
		echo '<br><br>';
		$monObjet->setAttribut('Testons !!!');
		$monObjet->afficher();
	?>
Lorsque j'exécute ça sur mon serveur j'obtiens:

monAttribut vaut :
monAttribut vaut :

testDeux vaut : test !!! qui marche car c'est statique...
testDeux vaut : test !!! qui marche car c'est statique...

unAutreAttribut vaut :
unAutreAttribut vaut :



monAttribut vaut :
monAttribut vaut :

testDeux vaut : test !!! qui marche car c'est statique...
testDeux vaut : test !!! qui marche car c'est statique...

unAutreAttribut vaut :
unAutreAttribut vaut :


J'ai laissé les commentaires pour illustrer toutes les possibilités que j'ai pu explorer. Je pense que j'oublie un truc tout bête, mais j'ai beau tourner le problème dans tous les sens je ne trouve pas où je fais pas le bon truc...

Si quelqu'un a compris d'où vient mon problème, je l'en remercierais grandement.
Priato est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 15h58   #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 pas $monAttribut mais self::$monAttribut

Code :
1
2
echo "monAttribut vaut : $monAttribut";
echo "monAttribut vaut : " . self::$monAttribut;

et c'est pas :
var $unAutreAttribut
mais
public $unAutreAttribut


et ensuite $this->unAutreAttribut



EDIT : et le constructeur c'est pas maClasse mais __construct
faut pas mélanger le PHP 4 et le PHP 5, ca va vite devenir lourd a maintenir, c'est l'un ou l'autre
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 16h47   #3
Membre actif
 
Inscription : mars 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 65
Points : 169
Points : 169
J'ai appris sur PHP4 à l'époque, et étant programmeur actuel C/C++/Java, je suis parti sur le principe que le this suffirait alors que j'obtiens une erreur. D'ailleurs je ne comprends pas pourquoi on utilise pas le thisdans ce cas (il doit y a voir une bonne raison...). Je vais me renseigner là-dessus.

Pour ce qui est du constructeur je n'ai jamais appris avec __construct et c'est donc une découverte pour moi.

Comme promis:

Je te remercies grandement !
Priato est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 16h56   #4
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 Priato Voir le message
J'ai appris sur PHP4 à l'époque, et étant programmeur actuel C/C++/Java, je suis parti sur le principe que le this suffirait alors que j'obtiens une erreur. D'ailleurs je ne comprends pas pourquoi on utilise pas le thisdans ce cas (il doit y a voir une bonne raison...). Je vais me renseigner là-dessus.

Pour ce qui est du constructeur je n'ai jamais appris avec __construct et c'est donc une découverte pour moi.

Comme promis:

Je te remercies grandement !
en statique c'est self, en instance c'est this
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 17h58   #5
Membre actif
 
Inscription : mars 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 65
Points : 169
Points : 169
En fait j'ai eu des soucis avec les $, soit je les oublie, soit j'en mets trop, genre:
$this->$truc = 3;
ou
this->$truc = 3;

Bref, il faut de toute manière galérer un peu pour que ça rentre.

Merci encore
Priato est actuellement 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 17h17.


 
 
 
 
Partenaires

Hébergement Web