JeuWeb - Crée ton jeu par navigateur
Essai de POO, est-ce correct ? - 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 : Essai de POO, est-ce correct ? (/showthread.php?tid=727)

Pages : 1 2


Essai de POO, est-ce correct ? - Sephi-Chan - 29-01-2007




RE: Essai de POO, est-ce correct ? - gtsoul - 29-01-2007

tes attributs ( public $nom;public $xp;public $pvWink devraient être privés et disposer d'accesseurs.
De plus, chaque classe (à part pour les classes privées) doit être définie dans un fichier propre nommé par son nom (donc dans Personnage.class.php5).

Je suis contre l'utilisation des die dans le cas d'une mauvaise requete; utilise plutot une redirection propre avec un avertissement.

Code PHP :
<?php 
$nom
= $this->nom;
$xp = $this->xp;
$pv = $this->pv;

echo
'
Nom : '
,$nom,'<br />
Experience : '
,$xp,'<br />
Points de vie : '
,$pv,'<br />
'
;
Quel est l'interêt d'utiliser d'autres variables ? fais plutot :
Code PHP :
<?php 
echo '
Nom : '
,$this->nom,'<br />
Experience : '
,$this->xp,'<br />
Points de vie : '
,$this->pv,'<br />
'
;


Quand tu actualises ta bdd, n'oublie pas d'actualiser aussi les attributs de tes classes; car même si celle-ci disparait à la fin de la page, des effets de bords peuvent survenir (ex : une deuxième attaque survient ou un test de riposte sur un mort)
Code PHP :
<?php 
$this
->pv = $this->pv + $soinsRecus; et "UPDATE ... SET pv = $this->pv"


Et dernière chose, utilise une classe bdd pour tes requetes/connection. Avec une simple fonction die tu ne remontes que d'un cran, or en objet, tu auras souvent une petite dizaine de couches à remonter.
(ex : $personnage->arme->getDegats(); si une erreur survient dans une fonction UPDATE de getDegats, tu ne connaitras pas les paramètres entrés dans personnage et arme qui ont provoqués l'erreur).


RE: Essai de POO, est-ce correct ? - Sephi-Chan - 29-01-2007

gtsoul a écrit :tes attributs ( public $nom;public $xp;public $pvWink devraient être privés et disposer d'accesseurs.
Pourrais tu développer un peu s'il te plaît ? J'avoue ne pas comprendre ce dont tu parles. Confused

gtsoul a écrit :Je suis contre l'utilisation des die dans le cas d'une mauvaise requete; utilise plutot une redirection propre avec un avertissement.
Ok, mais quel genre de redirection, et si c'est par header comment afficher l'avertissement (puisque c'est instantané) ?

gtsoul a écrit :Et dernière chose, utilise une classe bdd pour tes requetes/connection. Avec une simple fonction die tu ne remontes que d'un cran, or en objet, tu auras souvent une petite dizaine de couches à remonter.
(ex : $personnage->arme->getDegats(); si une erreur survient dans une fonction UPDATE de getDegats, tu ne connaitras pas les paramètres entrés dans personnage et arme qui ont provoqués l'erreur).
Là par contre j'ai rien compris Confused. Je débute tout juste mes essais en POO, et je n'ai aucune idée des bonnes pratiques, des choses à faire/ne pas faire. Pourrais-tu m'éclairer la dessus ?


En tout cas merci beaucoup pour ta réponse qui me donne des pistes qui me feront peut-être progresser.

Sephi-Chan


RE: Essai de POO, est-ce correct ? - joshua - 29-01-2007

tu devrais te mettre aussi au mvc... ca va de paire! car la tu ne vas pas au fond de la philosophie objet / separer code/html


RE: Essai de POO, est-ce correct ? - Sephi-Chan - 29-01-2007

Pourquoi pas tiens, tu aurais des pistes qui expliquent un peu le concept ?

Pour le moment j'ai pu trouver quelques articles sur http://tahe.developpez.com/web/php/mvc/ notamment, mais s'il y à d'autres articles, dans le genre CCC (Clair, concis, concret), je suis preneur Wink.


Sephi-Chan


RE: Essai de POO, est-ce correct ? - joshua - 29-01-2007

en gros pour faire simple:
tu fais une classe d'accesseur (model) qui te permet d'acceder a ta bdd (toto.db.class.php)
tu fais une classe de fonctions applicatives qui derive de ta classe d'accesseur et qui y accede (controlleur)
tu fais ton schema final qui se sert de ta classe controlleur.


RE: Essai de POO, est-ce correct ? - gtsoul - 30-01-2007

pour privatiser tes attributs :
Code PHP :
<?php 
class Personnage {

private
$nom;

public function
getNom() // un getter : permet d'obtenir une valeur
{ return $this->nom;}
public function
setNom($valeur) // un setter : permet de modifier un attribut
{ $this->nom = $valeur; }
Voilà ca à l'air de servir à rien ; mais réduire la visibilité de tes variables améliore la lecture de ton code. Avec un IDE comme eclipse, tu peux à tout moment utiliser l'autocomplétion, sauf que si tout est public tu vas vite te retrouver avec des centaines de choix dispos ; eclipse gère la génération de getter/setter si tu n'as pas envie de le taper.
En outre, cela te permet de réaliser un traitement sur tes valeurs, ex : tu peux vérifier si elle est non-nulle, réaliser une requete si ce n'est pas le cas, effectuer un filtre, etc ...

Pour le message d'erreur, tu crées une fonction refresh($url , $message) avec ob_end_clean() et header($url);
tu peux essayer de passer le $message dans une variable de $_SESSION (que tu réinitialiseras au début de chaque page)ou par get ; personnellement si un message est important je le stocke dans ma bdd au même titre que les logs; sinon je l'affiche à la volée et je fournis un lien de retour.


Sur le dernier point, tu peux utiliser les classes de connexion que j'ai présenté dans un tuto.


RE: Essai de POO, est-ce correct ? - joshua - 30-01-2007

tu peux aussi forcer les setter et les getter par defaut avec __set et __get ^^


RE: Essai de POO, est-ce correct ? - gtsoul - 30-01-2007

les surcharger tu veux dire ?
ca marche comment ?


RE: Essai de POO, est-ce correct ? - joshua - 30-01-2007

tout est expliqué la :

http://www.manuelphp.com/php/language.oop5.overloading.members.php


l'utilisation est normale par la suite.