JeuWeb - Crée ton jeu par navigateur
[POO] Interaction entre deux classes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [POO] Interaction entre deux classes (/showthread.php?tid=462)

Pages : 1 2


[POO] Interaction entre deux classes - fiatt - 20-11-2006

Je lance la machine sur la POO!
(A ce propos un sous-forum POO serait peut-être le bienvenue?)

Je tente de créer une classe simple et de la faire interagir avec une autre.

Voici ma classe, on ne peut plus simple:
Code PHP :
<?php 
class Ressources {
var
$nom;
var
$rendement;
}

La seconde classe est une classe de connexion à Mysql:
Code PHP :
<?php 
class Mysql {
private
$host;
private
$user;
private
$pass;
private
$db;

function
__construct($host,$user,$pass,$db)
{
$this->connect = mysql_connect($host,$user,$pass);
if (
$this->connect !== FALSE) // si la connexion a réussie
{
$this->db = mysql_select_db($db,$this->connect); // on tente de sélectionner la base de données
if ($this->db === FALSE) // si la sélection a échoué
{
mysql_close($this->connect); // on ferme la connexion
$this->connect = FALSE; // on met le statut de connexion à FALSE
die(mysql_error()); // on affiche une erreur
}
return
TRUE; // sinon on renvoie TRUE
}
die(
mysql_error()); // sinon on affiche une erreur
}


function
EnvoiRequete($sql)
{
$this->result = mysql_query($sql) or die(mysql_error());
}


}


Si je met ceci dans le script de ma page:
Code PHP :
<?php 
$bdd
= new Mysql();

$sql = "UPDATE stock SET qtt_poss = (qtt_poss + " . $quantite .") WHERE id_joueur = ". $_SESSION['id_joueur'] ."AND" . nom = $this->nom;

$bdd -> EnvoiRequete ($sql)
j'ai bon?

En fait je me rend compte que je ne sais pas quand utiliser $this-> et surtout comment dire que cette variable vient de telle ou telle classe...


RE: [POO] Création d'une classe simple - joshua - 20-11-2006

fiatt, je te ferais un message ce soir.....
MAis déjà je peux te dire: arrête les "var" qui sont dépréciés en php5.
Si tu veux faire de l'objet, laisse tomber le php4.
Et tout comence par un constructeur ... il te faut auparavant avoir créé une classe BDD.

Code PHP :
<?php 
class Ressources {
private
$nom;
private
$rendement;

function
_construct($db_paramètre)
{
$this->db=$db_paramètre;
}

function
gagner( $quantite )
{
//faire un update dans la table des stocks pour le joueur et la ressource concernés
$maquery="UPDATE stock SET qtt_poss = (qtt_poss + $quantite) WHERE id_joueur = ".$_SESSION['id_joueur']." AND nom = ".$this->nom;
$res=$this->db->query(maquery);//execution en base de la query
$objet=$this->db->objet($res); //fonction qui ressort le resultat sous forme d'objet
}
function
perdre( $quantite )
{
//faire un update dans le table des ressources pour le joueur et la ressource concernés
}
}

Ensuite, tu pars completement dans le faux. Tel que tu l'as concu, une fonction elementaire (ta classe ressources) qui fait partie du MODEL s'appuie sur des variables de session qui font partie du VIEW.
Renseigne toi sur le modele MVC (MODEL VIEW CONTROLLER)
tu verras que ca n'est pas la bonne méthode.
Enfin, sache qu'on ne travaille jamais sur un objet "en base" tu travaille sur ton objet qui est a l'image de ta base, puis tu insere en base.


En gros si tu as une table ressource (valeur,timestamp, vitesse d'augmentation)
alors tu as un objet ressource objet->valeur,objet->timestamp,objet->vitesse

donc tu travailles sur ton php et non ta base ce qui diminue drastiquement les acces bases inutiles.....


RE: [POO] Interaction entre deux classes - fiatt - 20-11-2006

oups, désolé j'ai éditer et modifier mon premier message pendant que tu postais le tien...

Tu verras que mon nouveau message respecte mieux le MVC.


RE: [POO] Interaction entre deux classes - joshua - 20-11-2006

euh... bah tu n'as plus qu'une classe bdd la :p ou est passée ta classe applicative?
ensuite tout dépend de comment est construite ta base. Il faut que ce soit simple et clair....


RE: [POO] Interaction entre deux classes - fiatt - 20-11-2006

Bon, je crois que je vais devoir m'offrir un petit (qui as dit gros?!!) livre sur l'écriture de la POO en PHP5...
Si quelqu'un connait un bon titre?


RE: [POO] Interaction entre deux classes - Loetheri - 20-11-2006

Personnellement, je serais toi, j'attendrais encore un peu. Il faudra voir les nouvelles modifications dans la prochaine version de PHP, qui risque d'être encore plus axé POO.

Enfin, fais-ce que tu veux.
Ceci dit, je ne connais pas de livres axés uniquement (ou principalement) sur la POO en PHP.


RE: [POO] Interaction entre deux classes - jean-baptiste - 20-11-2006

L'interaction entre deux classe est pour le moment impossible ! OU de infime possiblité ! miuex vos faire deux classe indépendante et les faires :bisou: après !!


RE: [POO] Interaction entre deux classes - joshua - 20-11-2006

je te conseille php5 avancé qui a été ecrit par un de mes collegues de promo. C'est vraiment une pointure sur le sujet.
Moi j'en ai beaucoup d'autres... mais pour commencer, c'est pas mal Wink


RE: [POO] Interaction entre deux classes - pascal - 20-11-2006

joshua a écrit :je te conseille php5 avancé qui a été ecrit par un de mes collegues de promo. C'est vraiment une pointure sur le sujet.
Moi j'en ai beaucoup d'autres... mais pour commencer, c'est pas mal Wink
tu veux dire un de mes collègues de promo? Wink

pour l'interaction entre classes, il y a un truc très pratique: la composition.

c'est quand un membre d'une classe est un objet d'une autre classe.

je conseille le livre "Design patterns tête la première" qui donne pas mal d'infos sur les designs patterns, mais aussi des conseils plein de bon sens, bien expliqués sur la POO.

A+

Pascal

PS: est-ce que quelqu'un suit les sujets sur la POO de tourdejeu?


RE: [POO] Interaction entre deux classes - blackduty - 20-11-2006

pascaltje a écrit :PS: est-ce que quelqu'un suis les sujets sur la POO de tourdejeu?

Oui très rapidement car je dois avouer que je rame pas mal sur la POO.... pourquoi cette question ?