JeuWeb - Crée ton jeu par navigateur
POO, gestion et utilisation - 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, gestion et utilisation (/showthread.php?tid=2859)

Pages : 1 2 3 4 5 6 7 8 9 10 11


RE: POO, gestion et utilisation - christouphe - 30-11-2010

Pour la première partie de ton message, avant le code:
Tu passes les paramètres à ton constructeur, MAIS tu dois, dans le corps de ce dernier, dire à qui / quoi tu affecte les paramètres, comme dans une fonction normale...Je comprends pas ton problème de compréhension là en fait.

Comme dit plus haut, dans le setX(), tu peux ajouter une vérification, tout dépend de l'architecture de ton application. Mais bon c'est très conseille. Dans mon code ce n'est pas implémenté car j'en suis pas encore là.

Ensuite une explication sur les unités/unités_joueur:

J'ai fait une classe unité qui est la classe mère de toutes les unités du jeu (PJ,PNJ) à la base cette classe me servira à la fois dans le jeu ET dans l'administration de mes tables. Elle prends ses information d'une table "unites" qui comporte toutes les caractéristiques des unités, cqfd.

Les unites_joueur sont les fille des unites, un héritage simple pour le moment (idJoueur) mais auquel je vais sûrement ajouter un inventaire pour certaine, des capacité spéciales...etc

Elles prennent leurs informations d'une table unite_joueur où, et c'est là l'astuce, je clone les caractéristiques de l'unité auxquelles j'ajoute l'id du joueur, inventaire...etc Mais vous allez me dire "redondance" et bien pas faux au départ, mais comme chaque unité d'un joueur peu accéder à de l'expérience, peut être customisée, in fine, elle ne ressemblera plus à un clone.

Je sais pas si je suis clair :p


RE: POO, gestion et utilisation - Dexyne - 30-11-2010

Oui mais dans une fonction normal t'as pas forcément de paramètres, et tu peux créer un variable juste pour la fonction, 'fin je sais pas mais __construct j'ai jamais utilisé et les fonctions même si je sais comment ça marche j'en utilise pas souvent en faite.

'Fin c'est aussi qu'en procédural ta pas $this->machin etc donc c'est peut-être la forme qui me paraît étrange vu que je n'y suis pas habitué (un peu pour l'utilisation de pdo mais c'est tout). Mais bon ça devrait être bon maintenant.

Sinon ta pas répondu à mes questions (te concernant en tout cas ^^').

Ah et je voulais savoir dans ton code :


/**
* Description of daoUniteJoueur
*
* @author a459000
*/
class daoUniteJoueur extends daoUnite {
private $_idjoueur;

function __construct($id,$nom,$description,$def_av,$def_ar,$def_g,$def_d,
$mouvement,$capacite,$pilote,$co_pilote,$experience,
$att_g,$att_d,$armure,$coiffe,$etendart,$toucher,$initiative,
$sauvegarde,$endurance,$cac,$force,$attaque,$intell,$cout,$idjoueur) {
parent::__construct($id,$nom,$description,$def_av,$def_ar,$def_g,$def_d,
$mouvement,$capacite, $pilote, $co_pilote, $experience,
$att_g, $att_d, $armure, $coiffe, $etendart, $toucher, $initiative,
$sauvegarde,$endurance,$cac,$force,$attaque,$intell,$cout);
$this->_idjoueur = $idjoueur;
}

public function getIdjoueur() {
return $this->_idjoueur;
}
}

j'aimerais savoir comment ça marche. En gros tu défini via parent::__construct() les valeurs par défauts et via le __construct les valeurs pour le joueur ? (je sais que parent appel la fonction de la classe parente mais j'ai du mal à saisir l'utilité de définir les valeurs dans le __construct et via parent, sachant qu'ils ont le même nom (les variables) mais vu que tu n'as pas terminé la classe j'aurais peut-être saisi via la suite du script ^^').
Si on défini celle du parent il y aura possibilité d'avoir nos valeurs modifier dans ce cas ? (via les getters / setters (et donc les requêtes SQL) ?)

'Fin bon je vais allez lire un peu plus sur la POO ça m'aidera surement ^^.

PS: désoler d'être bête :p !


RE: POO, gestion et utilisation - niahoo - 30-11-2010

(30-11-2010, 11:04 AM)christouphe a écrit : Je comprends pas ton problème de compréhension là en fait.

j'avoue qu'on dirait que tu le fais exprès..

à quoi te sers de déclarer des paramètres à une fonction vide ?


RE: POO, gestion et utilisation - Dexyne - 30-11-2010

J'ai pas compris ce que tu me demandais niahoo, tu parles du constructeur ?
Et tu m'as dit que $this->monNom ne servait à rien donc je pensais que ça serait obsolète.

'Fin bref je vais lire et je verrais bien parce que bon.


RE: POO, gestion et utilisation - NicoMSEvent - 30-11-2010

Je pense qu'il y a un petit probleme de communicatin/compréhension.

En effet, $this->nom; ne sert à rien (rien n'est fait sur cette variable). Par contre,

class ma_classe{
private $nom;
__construct($p_nom){
$this->nom=$p_nom
}
}

ce morceau de code, va permettre d'initialiser le variable $nom dans ta classe (je prefere mettre $p_nom pour bien identifier le parametre)
$p_nom n'existe que dans ton constructeur, donc, si tu ne fait rien avec ton parametre, une fois que tu sort de ton constructeur, tu perd l'information qui était dedans (même si nomme ton parametre de la meme maniere que ta variable de classe)


RE: POO, gestion et utilisation - Sephi-Chan - 30-11-2010

Utilise Doctrine. Pas la peine de réinventer une roue qui ne tournera pas rond. Smile

Le constructeur présenté par Christouphe me semble plutôt inefficace, rien que le volume de code est conséquent pour si peu, de plus il compte beaucoup trop sur l'ordre des arguments : je ne vois pas les avantages que ça apporte par rapport à une solution telle que l'utilisation d'un hash (qu'on pourrait appeler attributes) ? Profitez de l'utilisation de langages dynamiques, même si ce n'est pas vraiment le fort de PHP, il y a moyen de faire plus élégant et efficace que ça.


Sephi-Chan


RE: POO, gestion et utilisation - Dexyne - 30-11-2010

Oui la j'ai compris c'est claire.

Un petit truc que j'avais peut-être aussi mal compris c'était au niveau de l'utilisation des variables qui était après $this ou dans le constructeur ou la valeur donné mais c'est bon maintenant.

Par contre je ne comprend pas (mais ça viendra peut-être avec une plus grande connaissance de la POO) dans le script de christouphe le faite d'utiliser parent::__construct et d'avoir au dessus un construct qui redéfini les variables du parent + celle de la classe en elle même.
Pour la classe en elle même je comprend mais le faite d'appeler le constructeur parent ne fait pas initialisé les variable du parent ? (je ne sais pas si je suis très clair là ^^').

Sephi (ou même autrui) et même si j'ai vaguement connaissance de Doctrine (ou des autres ORM) dans le seul de leur utilité, j'aimerais en savoir un peu plus sur eux.
Que permettent-ils en gros (avantages/inconvénients) ? (je compte lire le tuto du Sdz sur Doctrine puis voir ailleurs pour plus d'infos si nécessaire, pensez-vous que j'aurais de quoi faire avec le sdz ? Pour mon utilité actuel je parle).

En tout cas merci de vos aides et de votre patience :haha:.

EDIT: je me demandais, n'est-il pas mieux de voir comment le faire en PHP avant d'utiliser Doctrine ? Pour savoir ce que je fais, etc. ?


RE: POO, gestion et utilisation - NicoMSEvent - 30-11-2010

prends tes renseignements d'un max de sources, recoupe les, fais des tests (c'est ça le plus important), tu arriveras bien a comprendre comment ça marche Smile

Pour le moment, je pense que manipuler les variable du parent n'est pas tres utile pour le moment, apprends d'abord les bases avant d'essayer plus compliqué Wink


RE: POO, gestion et utilisation - christouphe - 30-11-2010

c'est une classe hérité. Donc j'appelle le constructeur du parent pour "construire" mon objet.


RE: POO, gestion et utilisation - Jeckel - 30-11-2010

(30-11-2010, 10:56 AM)Dexyne a écrit : Ok j'ai compris ce point là maintenant.
Et donc si j'ai bien suivi (niahoo) je pourrais écrire


function __construct($id, $nom, $description, $moral = 100, $resistance = 100, $vitesse = 1, $reflexes = 10,
$portee, $puissanceTir, $capacitesPhysiques, $blindage)
{
...
}

Attention !

Ce que tu mets après le égal est une valeur par défaut... pour le cas où, ce paramètre n'est pas fourni lors de l'appel à la méthode (constructeur ou pas).

En toute logique, les paramètres d'une fonction qui sont optionnel (et pour lesquels on a définit une valeur par défaut) se mettent à la fin...

Je vais prendre un exemple simple :

function foo($parm1 = 'tata', $param2)
{
echo $param1 . ' ' .$param2;
}

// $param1 est optionnel (il prendra la valeur 1 si je ne le précise pas), mais $param2 est obligatoire...

foo('tutu'); // renvoie une erreur, il manque le second paramètre

foo('tutu', 'toto'); // fonctionne met on a été obligé de spécifier $param1 et la valeur par défaut ne sert donc à rien du tout
==> tutu toto

Le code juste serait plutôt


function foo($param1, $param2 = 'tata')
{
echo $param1 . ' ' . $param2;
}

foo('tutu');
==> tutu tata

foo('tutu', 'toto');
==> tutu toto

Voilà, donc dans une fonction, toujours mettre les paramètres optionnels à la fin...