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 :

affichage String en dynamique (POO) [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 68
    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 : 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();
    	?>
    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.

  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
    c'est pas $monAttribut mais self::$monAttribut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 68
    Par défaut
    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 !

  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 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

  5. #5
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 68
    Par défaut
    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

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

Discussions similaires

  1. [XML/CSS/XSL] Problème d'affichage des images "dynamiqu
    Par popol55 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 06/04/2006, 16h24
  2. Importer un string (Lib Dynamique)
    Par JulienDuSud dans le forum C++
    Réponses: 2
    Dernier message: 19/12/2005, 10h19
  3. [VB.NET] - affichage de webcontrols dynamiquement
    Par karibouxe dans le forum ASP.NET
    Réponses: 6
    Dernier message: 15/06/2005, 11h53
  4. affichage de tableau dynamique
    Par EJ dans le forum XMLRAD
    Réponses: 12
    Dernier message: 04/06/2004, 10h58
  5. [MX 2004] Affichage du texte dynamique
    Par caramel dans le forum Flash
    Réponses: 8
    Dernier message: 29/01/2004, 16h07

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