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:
Lorsque j'exécute ça sur mon serveur j'obtiens:
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 <?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(); ?>
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.
Partager