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] Probléme de syntaxe dans une classe


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut [POO] Probléme de syntaxe dans une classe
    Bonjour,

    Je suis grand débutant en PHP et j'ai un probléme de syntaxe que je ne comprend pas

    : Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ------------/PNJ.class.php on line 6

    Pourriez vous m'aider a trouver l'erreur svp ?

    Ces classes seront utilisés pour créer un MMORPG en ligne (Projet pour les cours).

    La premiere classes est une classe abstraite definissant un Personnage en general, la seconde defini un PNJ

    C'est lors de l'instanciation de la seconde classe que mon erreur appraît.

    Mon code : Classe Personnage:

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    <?php
    	include("Capacite.class.php");
    	include("ListeEquipement.class.php");
     
    	abstract class Personnage{// On considere qu'un personnage regroupe les PJ et PNJ
    		public $id;
    	 	public $nom;
    	        public $force;
    		public $adresse;
    		public $resistance;
    		public $niveau;
    		public $experience;
    		public $case;
    		public $ptsVieMax;
    		public $ptsVie;
    		public $listeEquipement;
    		public $capacite;
    		public $ptsAction;
     
    		public function __construct(){
    		    $connexion=mysql_connect("","","") or die("erreur connexion");
    	        mysql_select_db("") or die("erreur base");
                       if(func_num_args()==1){	//On construit notre personnage a partir d'un personnage deja existant
    				$this->$id=func_get_arg(0);
    				$requete='SELECT * from personnage where id=\''.$id.'\';';
    				$select=mysql_fetch_array(mysql_query($select));
    				$this->nom=$select[1];				
    				$this->force=$select[2];
    				$this->adresse=$select[3];
    				$this->resistance=$select[4];
    				$this->niveau=$select[5];
    				$this->experience=$select[6];
    				$this->capacite=new Capacite($id);//On initialise les capacités grâce à l'id
    				$thise->case=$select[7];
    				$this->listeEquipement=new ListeEquipement($id);//Idem
    				$this->ptsVieMax=$this->force+$this->adresse+$this->resistance;//Les points de vie sont l'addition de toutes les caracteristiques
    				$this->ptsVie=$select[8];
    				$this->ptsAction=$select[9];
    			}
    			else if(func_num_args()==7){//Creation d'un nouveau personnage
    				$this->nom=func_get_args(0);
    				$this->force=func_get_args(1);
    				$this->adresse=func_get_args(2);
    				$this->resistance=func_get_args(3);
    				$this->niveau=func_get_args(4);
    				$this->experience=func_get_args(5);
    				$this->case=func_get_args(6);
    				$this->ptsVieMax=$this->force+$this->adresse+$this->resistance;//Les points de vie sont l'addition de toutes les caracteristiques
    				$this->ptsVie=$this->ptsVieMax;
    				$this->ptsAction=12;
    				$requete='insert into personnage(nom,force,adresse,resistance,niveau,experience,case,ptsAction) values(\''.$this->nom.'\','.$this->force.','.$this->adresse.','.$this->resistance.','.$this->niveau.','.$this->experience.','.$this->case.','.$this->ptsVie.','.$this->ptsAction.');';
    				$requete='select id from personnage where nom=\''.$this->nom.'\';';
    				$select=mysql_query($requete);
    				$select=mysql_fetch_array($select);
    				$this->id=$select;
    			//	$this->capacite=new Capacite($this->id,$this->adresse,$this->resistance,$this->force);//Lorsque l'on crée un nouveau personnage, il n'a aucun bonus équipement etant donne qu'on considere qu'il est a poil
    			//	$this->listeEquipement=new ListeEquipement($id);
    			}
    			else 
    			           throw new Exception("erreur d'argument");
    		}
     
    		public function __destruct(){//Lors de la supression d'un personnage
    			unset($this->nom);
    	    	           unset($this->force);
    			unset($this->adresse);
    			unset($this->resistance);
    			unset($this->niveau);
    			unset($this->experience);
    			unset($this->case);
    			unset($this->ptsVie);
    			$this->capacite->__destruct();
    			$this->listeEquipement->__destruct();
    			unset($this->listeEquipement);
    			unset($this->capacite);
    			unset($this->id);
    		}
     
    		public function attaquer(){//On calcules les valeurs en fonction du niveau des capacités
    			$attaque=Combat::calculDes($this->capacite->attaque);
    			$degats=Combat::calculDes($this->capacite->degats);
    			return array($attaque,$degats);
    		}
     
    		public function defendre(){//Idem
    			$esquive=Combat::calculDes($this->capacite->esquive);
    			$defense=Combat::calculDes($this->capacite->defense);
    			return array($esquive,$defense);
    		}
     
    		public function laisserTomberObjet($c){
    			$c->setObjet=new ListeEquipement($this->getListeEquipement());//On Laisse tomber les objet sur la carte
    			unset($this->getListeEquipement());
    	    }
     
    		public function diminuerPV($n){
    		    $this->pointsVie-=$n;
    		}
     
    		public abstract function seDeplacer($carte);
     
    		public function getId(){
    			return $this->id;
    		}
     
    		public function getNom(){
    			return $this->nom;
    		}
     
    		public function getForce(){
    			return $this->force;
    		}
     
    		public function getAdresse(){
    			return $this->adresse;
    		}
     
    		public function getResistance(){
    			return $this->resistance;
    		}
     
    		public function getNiveau(){
    			return $this->niveau;
    		}
     
    		public function getExperience(){
    			return $this->experience;
    		}
     
    		public function getCase(){
    			return $this->case;
    		}
     
    		public function getPtsVie(){
    			return $this->ptsVie;
    		}
     
    		public function getPtsAction(){
    			return $this->ptsAction;
    		}
     
    		 public function setPtsAction($arg){//les pts d'action seront reaccorder ts les x temps
                $this->ptsAction+=$arg;
            }
     
    	}
    ?>
    Classe PNJ:

    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
     
     
    <?php
    	include("Combat.class.php");
    	include("Personnage.class.php");
     
    class PNJ extends Personnage{
     
        public function seDeplacer($carte){//Combat si deux persos sont sur la meme case et le personnage se deplacera tant qu'il aura des PA  
    	  	  while(parent::getPtsAction()>0){
        		$combat=$this->attaquerPerso($carte); 
        		if(!isset($combat)){//Dtermine si on est au cours d'un combat
        			$x=rand(-1,1);//On ne peut se deplacer que d'une case  la fois en avant ou en arrire
        			$y=rand(-1,1);
        			if(parent::getCase()->getX()+$x>$carte->getLimiteX() || parent::getCase()->getX()+$x<$carte->getLimiteX())//Si on est hors des limites du tableau on prend la valeur oppos de x 
        				$x=-$x;
        			if(parent::getCase()->getY()+$y>$carte->getLimiteY() || parent::getCase()->getY()+$y<$carte->getLimitY())//Si on est hors des limites du tableau on prend la valeur opposé de y
        				$y=-$y;
        			$case=$carte->getCase($x,$y);
        			parent::setCase($case);
        			$case->setPerso($this);//Pour que le personnage avance, on met son id sur la case suivante 
        		}
        		if(parent::getPtsAction>0 && isset($combat) ) { //Remplacer 0 par le nb de pt d'action pour un combat
        			Combat::combatre($this,$combat);
        			unset($combat);
        			return null;
        			//Enlever le nb de ptAction necessaire au combat
        		}	
        		//parent::setPtsAction(-xx)  Enlever le nb de pts d'action necessaire au deplacement
    	    }
    	}
     
    	private function attaquerPerso($carte){//Regarde si il y a un perso sur les case adjacentes
    	$i=0;
    	$x=-1;
    	$y=-1;
    	$coordonneeX=parent::getCase()->getX();
    	$coordonneeY=parent::getCase()->getY();
    	while($x<2){
    	    $coordonneeX+=$x;
    		while($y<2){
    			$coordonneeY+=$y;
    			if($carte->getCase($x,$y)->getPerso()!='' && $carte->getCase($x,$y)->getPerso() instanceof PJ)
    				return $carte->getCase($x,$y)->getPerso();//Si la valeur d'une des case adjacentes n'est pas nulle alors il y a un probable adversaire a affronter
    			$y++;
    		}
    		$x++;
    	}
    	return null;
    	}
    }
    ?>
    merci d'avance

  2. #2
    Membre régulier Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 87
    Points
    87
    Par défaut
    Salut,

    visiblement je n'ai pas la même erreur que toi lors de l'interprétation du code par PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fatal error: Can't use method return value in write context in /home/tes/dir_tes/dev/web/secure.plannet/test1.php on line 93
     
    Ligne : unset($this->getListeEquipement());
    Visiblement, tu essaie de désaffecter le résultat d'une méthode et PHP n'apprécie pas.

    Sinon une fois cela corrigé, plus de problèmes... ton erreur n'apparait pas.

    Cordialement,

  3. #3
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    Tu tournes avec quelle version de php?

    Le problème est qu'avant la version 5, la notion d'objet dans PHP n'incluait pas la portée de l'objet (public, private) - Pour fonctionner, il suffit donc de supprimer la portée et donc de transformer le code suivant :

    ...

    en

    soit tu passe à la version 5 si c'est pas le cas pour remedier à ce message.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Merci bcp
    c'est bien le serveur qui n'était pas configuré pour php5 et j'ai reglé par la même occasion le probléme du unset()

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

Discussions similaires

  1. [POO] erreur de syntaxe dans une classe
    Par ChronoTiger dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2009, 19h40
  2. [POO] Erreur de syntaxe avec une classe
    Par sirbaldur dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2007, 13h30
  3. problème d'accès dans une classe dérivée!
    Par chrono23 dans le forum C++
    Réponses: 47
    Dernier message: 10/10/2006, 11h22
  4. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05
  5. Réponses: 2
    Dernier message: 17/12/2005, 20h52

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