Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 22/01/2013, à 20:48

Bat_Tuc

PHP: Orienté Objet

Bonjour a tous
je me lance dans un projet de PHP pour la réalisation d'un jeu
pour l'instant le principe est simple ( parce que je ne suis pas loin ) j'ai une partie qui est composé d'un ensemble de pays et d'un ensemble de matiere
sachant que à chaque matiere est associé un tableau de pays producteur ..
j'ai un probleme lors de la création de ma liste de matiere ..
voila mon code

Partie.php

<?php
class Partie
{
	private $nom;
    private $cases;
	private $joueurs;
	private $matiere;
	private $pays;
	private $carte;
	public function __construct()
    {
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=rdm', 'root', '');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
			echo " ERREUR";
		}
		$reponse = $bdd->query('SELECT * FROM pays ');
		while ($donnees = $reponse->fetch())
		{ 
			$this->pays[]=new Pays($donnees['Id']);
		}
		$reponse->closeCursor();
		$reponse = $bdd->query('SELECT * FROM matiere ');
		while ($donnees = $reponse->fetch())
		{ 
			$this->matiere[]=new Matiere($this,$donnees['Id']);	
		}
		$reponse->closeCursor();

	}
	public function getMatiere($NomMatiere)
	{
	foreach($this->matiere as $element)
		{
		if($element->getNom()==$NomMatiere)
		return $element;
		}
	}
	public function Affich()
	{
		foreach($this->matiere as $element)
		{
			$element->Affich() . '<br />';
		}
		foreach($this->pays as $element)
		{
			echo $element->Affich() . '<br />';
		}
	}
	public function getPays($idPays)
	{
		foreach($this->pays as $element)
		{
			if($element.getId()==$idPays)
			{
			return $element;
			}
		}
		return null;
	}
}
?>

Pays

<?php
class Pays
{
	private $id;
	private $nom;
    private $continent;
	private $production;
	private $nbProd;
	public function __construct($idPays)
    {
	$nbProd=0;
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=rdm', 'root', '');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
			echo " ERREUR";
		}
		$reponse = $bdd->query('SELECT * FROM pays ');
		while ($donnees = $reponse->fetch())
		{ 
		if($donnees['Id']==$idPays)
			{
			$this->id=$donnees['Id'];
			$this->nom=($donnees['Nom']);
			$this->continent=$donnees['Continent'];
			}
		}
	$reponse->closeCursor();
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=rdm', 'root', '');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
			echo " ERREUR";
		}
		$reponse = $bdd->query('SELECT * FROM matiere');
		while ($donnees = $reponse->fetch())
		{ 
			if($donnees['PaysProducteur1']==$idPays){
				$this->production[]=new Production($donnees['Nom'],$donnees['Production1'],$this->nom);
				$nbProd;
			}
			if($donnees['PaysProducteur2']==$idPays){
				$this->production[]=new Production($donnees['Nom'],$donnees['Production2'],$this->nom);
				$nbProd;
			}
			if($donnees['PaysProducteur3']==$idPays){
				$this->production[]=new Production($donnees['Nom'],$donnees['Production3'],$this->nom);
				$nbProd;
			}
			if($donnees['PaysProducteur4']==$idPays){
				$this->production[]=new Production($donnees['Nom'],$donnees['Production4'],$this->nom);
				$nbProd;
			}
			if($donnees['PaysProducteur5']==$idPays){
				$this->production[]=new Production($donnees['Nom'],$donnees['Production5'],$this->nom);
				$nbProd;
			}
			if($donnees['PaysProducteur6']==$idPays){
			$this->production[]=new Production($donnees['Nom'],$donnees['Production6'],$this->nom);
			$nbProd;
			}
		}
	$reponse->closeCursor();
	}
	
	public function getId()
	{
		return $this->id;
	}
	
	public function getNom()
	{
		return $this->nom;
	}

	public function Affich(){
	echo $this->nom."pays numero: ".$this->id." est sur le continent ".$this->continent. '<br />';
		foreach($this->production as $element)
		{
		echo $element->Affich() . '<br />';
		}
	}
}
?>

Matiere

<?php
class Matiere
{
	private $nom;
    private $gain;
	private $PaysProducteur;
	private $Production;
 

    public function __construct($Partie,$idMatiere)
    {
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=rdm', 'root', '');
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
			echo " ERREUR";
		}
		$reponse = $bdd->query('SELECT * FROM matiere ');
		while ($donnees = $reponse->fetch())
		{ if($donnees['Id']==$idMatiere)
			{
			$this->nom = $donnees['Nom'];
			$this->gain=array($donnees['Gain30'],$donnees['Gain50'],$donnees['Gain70'],$donnees['Gain90']);
			$this->PaysProducteur=array($Partie->getPays($donnees['PaysProducteur1']),$Partie->getPays($donnees['PaysProducteur2']),$Partie->getPays($donnees['PaysProducteur3']),$Partie->getPays($donnees['PaysProducteur4']),$Partie->getPays($donnees['PaysProducteur5']),$Partie->getPays($donnees['PaysProducteur6']));
			$this->Production=array($donnees['Production1'],$donnees['Production2'],$donnees['Production3'],$donnees['Production4'],$donnees['Production5'],$donnees['Production6']);
			}
		}
		$reponse->closeCursor();
	}
	public function getNom()
	{
		return $this->nom;
	}
	public function Affich()
	{
		echo $this->nom . " est produit par ( pays / % ) : ";
		for ($numero = 0; $numero < 6; $numero++)
		{
			echo $this->PaysProducteur[$numero]->getNom(). ' ('.$this->Production[$numero].')-';
		}
		echo "</br> et rapporte ".$this->gain[0]." si entre 30 et 49% ".$this->gain[1]." si entre 50 et 69% ".$this->gain[2]." si entre 70 et 89% et ".$this->gain[3]." si plus de 90% </br>";
	}
}
?>

Mon probleme interviend lors de la création de ma liste de pays producteur lors de la création d'une matiere .
en effet pour chaque matiere dans ma bdd il y a l'id du pays qui correspond
je crée donc mon tableau PaysProducteur en voulant y mettre non pas l'id mais le pays en question ( de type pays donc ..)
je fais donc un getPays sur ma partie ( qui comprend mon ensemble de pays ) a partir de l'id du pays recherche . Pour trouver mon pays en question je parcours mon tableau de pays ( dans mon objet partie) et compare les id et retourne le bon pays.
Or j'ai un probleme lors de lexecution
" Fatal error: Call to undefined function getId() in C:\wamp\www\RdM\Partie.class.php on line 58 "
pour moi la fonction getId est bien defini pour l'objet sur lequelle je veux l'appliqué ( c'est a dire ici un pays ..)

je sais que c'est pas facile de se plonger dans un code comme celui la mais je suis vraiment bloqué ..
est ce que mon tableau PaysProducteur ' dans mon objet matiere ' n'est pas vraiment un tableau d'objet de type Pays ?
est ce que le probleme viend d'ailleurs ?


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#2 Le 22/01/2013, à 21:08

Bat_Tuc

Re : PHP: Orienté Objet

bon ok j'ai trouvé ...
-> et pas .


bordel .. trop dur de passé au Php apres avoir fais des heures et des heure de Java ><'


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#3 Le 04/02/2013, à 23:22

Goxha

Re : PHP: Orienté Objet

Sur la page Partie.php essaye de Rajouté/Modifier:

class Partie extends Pays { ....

&

Remplace:

if($element.getId()==$idPays)

Par:

if($this.getId()==$idPays)

Normalement l'erreur viens de là si tu n'a pas déjà trouvé l'erreur big_smile


Ubuntu 10.10 64bits Samsung R720 // intel core 2/2ghz // 4go de ram 17" + 20"
I love Ubuntu <3 Administrateur de www.my-serv.com

Hors ligne

Haut de page ↑