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 :

[POO] PHP5 : Problème avec les classes


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut [POO] PHP5 : Problème avec les classes
    Me revoila!!!

    Je viens d'installer la dernière release PHP5 (version 5.1.4) et j'ai commencé à tester les classes.
    Formidable la syntaxe est OK c'est compréhensible mais j'ai une toujours cette erreur suivante au niveau du navigateur quand j'éxécute le script:


    Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in C:\PROGRA~1\EASYPH~1\www\test\Exemple.php on line 5


    Voici le code du script Exemple.php :

    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
     
    <?php
     
      class A
       {
           public function foo() { echo $this->x; }
       }
     
       class B extends A
       {
           protected $x = "class B's member";
       }
     
       class C extends A
       {
           private $x = "class C's member";
       }
     
       $b = new B();
       $b->foo();
       $c = new C();
       $c->foo();
     
       // Output:
       // class B's member
       // Fatal error: Cannot access private property C::$x
     
    ?>
    J'ai fais des recherches et on dit que des fois, PHP ne digère pas le fait que les attributs soient public, private ou protected. Donc j'ai repris le même code sans le typage et rien n'y change...

    Avez vous une idée???

    Merci

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Juste comme ça... essaie de donner une variable $x à A
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Points : 283
    Points
    283
    Par défaut
    Et aussi, $x de B et C sont protected et private... C'est logique que tu ne peux pas les afficher !!!

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in C:\PROGRA~1\EASYPH~1\www\test\Exemple.php on line 5
    Tu est sur que l'install de php5 c'est faites correctement ? Essai un phpinfo(); juste pour ecarter cette possibilité.


    Autrement la construction est un peu étrange à priori.
    A ne connais pas C, comment peut il appeler une de ces propriétés ?

    C connait A, puisqu'il hérite, C peut donc appeler les propriétés public/protected de A.

    Pour le private, il n'est accessible que par un objet du type de la classe dont la proriété appartient directement.
    Pour rendre accessible la propriété aux classes héritantes, il faut utiliser protected.

    bbye

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    C'est un code que j'ai récupéré et que j'ai testé...
    C'est vrai qu'il est un peu tordu.

    Je vais faire plus simple et voir si cela fonctionne.

    Merci à tous

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    Voici un code un peu moins tordu que j'ai exécuté mais qui me donne toujours le même message d'erreur. Je le code de deux façons différentes (un avec les variables typées (private,public et protected) et l'autre sans).

    Voici les codes sources:
    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
     
    <?php
    class SimpleClass
    {
        // déclaration d'un membre
        $var = 'une valeur par défaut';
     
            // déclaration de la méthode
          function displayVar() {
         echo $this->var;
       }
    }
     
    $instance = new SimpleClass();
    $instance->displayVar();
    ?>
    et

    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
     
    <?php
    class SimpleClass
    {
        // déclaration d'un membre
        public $var = 'une valeur par défaut';
     
            // déclaration de la méthode
          public function displayVar() {
         echo $this->var;
       }
    }
     
    $instance = new SimpleClass();
    $instance->displayVar();
    ?>
    On obtient le même message suivant:
    Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in C:\PROGRA~1\EASYPH~1\www\test\SIMPLE~1.PHP on line 4


    Ce qui me parait surprenant, c'est quand utilisant le script suivant:
    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
    class A
    {
      function toto()
      {
        if (isset($this)) {
          echo '$this is defined (';
          echo get_class($this);
          echo ")\n";
        } else {
          echo "\$this is not defined.\n";
        }
      }
    }
    
    class B
    {
      function titi()
      {
        A::toto();
      }
    }
    
    $a = new A();
    $a->toto();
    A::toto();
    $b = new B();
    $b->titi();
    B::titi();
    on n'a plus de message d'erreur dans ce cas la et on affiche:
    $this is defined (a) $this is not defined. $this is defined (b) $this is not defined.

    Par contre, quand je rajoute une variable membre en public,private ou protected ou sans, sa buggue!!!!!

    Est ce normal??Avez vous un script qui fonctionne avec une classe et des variables membres??Je pense que la façon de déclarer les variables est correcte!!!

    PS: PHPInfo() me renseigne donc sur la version de PHP. C'est la 5.1.4 que j'ai installé tout à l'heure.

    Merci d'avance pour vos réponses

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ceci marche très bien chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class A
    {
       public $a = 'aaa';
     
       public function m() {
         echo $this->a;
       }
    }
     
    $o = new A();
    $o->m();
    ?>
    IMHO ta version de php est buggé. Essaye autre chose que EasyPhp pour un environnement de développement

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    Merci,

    Je l'ai tout de suite testé mais sa bugue!!!!
    Je vais suivre ton conseil. Je désinstalle EasyPhp et j'installe Wamp(c l'environnement que tu me conseilles il n'y a pas de bug???Y en a t-il un autre???).


    Thanks

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    wamp (ce que j'utilise) ou xamp
    ou à la main (apache + php + mysql), plus difficile, mais au moins tu maitriseras mieux ton environnement.

  10. #10
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Je te conseille vivement l'installation de wamp (qui est régulièrement mis à jour) ou si tu veux avoir beacoup plus de liberté, monte le système toi même en installant apache 2 + php + bdd c'est assez facile à installer et à configurer, il y a pleins de tutos traitant le sujet.
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

Discussions similaires

  1. Problème avec les classes génériques
    Par mimosa803 dans le forum C++
    Réponses: 1
    Dernier message: 23/10/2009, 14h44
  2. problème avec les classes abstraite avec C#
    Par takfa2008 dans le forum C#
    Réponses: 1
    Dernier message: 29/06/2009, 10h25
  3. Problème avec les classes et les méthodes abstract
    Par BOLARD dans le forum Langage
    Réponses: 5
    Dernier message: 22/09/2007, 20h27
  4. Problème avec les classes HttpWebRequest et HttpWebResponse sous C#
    Par zouzoulikou dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/08/2007, 01h46
  5. Problème avec les classes
    Par 30barrett40 dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2007, 14h04

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