Je débute en POO, comment commencer?

Eléphant du PHP | 82 Messages

24 févr. 2012, 13:42

Bonjour,

Je travail sur un site internet depuis environ 8 mois maintenant. Je n'ai rien codé en POO. Le site commence à contenir de plus en plus de code. J'aimerais commencer à mieux organiser mon code en commençant la POO.

Par exemple : Mon site propose aux membres d'uploader des documents scolaires grâce à un formulaire. Si le document est envoyé de façon privée, la majorité des champs obligatoire devienne facultatifs. J'ai aussi une page modifier document en fonction que le document soit privé ou public. ça me fait environ 4 fois le même code (à quelques modification près).. Je me rend compte que ce n'est pas optimal , mais je ne vois pas comment procéder pour rendre le code plus propre..

Merci d'avance !
Tex

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 févr. 2012, 15:31

Salut,

La pour le coup je te conseil de factoriser ton code en fonction.

Si ton site fonctionne ainsi ne casse pas tout pour "faire de la poo".

La poo ne réduit pas le code, c'est parfois même l'inverse.

Si tu souhaite t'y mettre je te conseil de commencer par la modélisation (diagrammes à gogo ;)) avant se tenter le code sinon ça va vite être le bordel.

Un site entièrement en procédural n'est pas forcément plus mauvais qu'un site à base poo ;)

Pour commencer =>http://www.lephpfacile.com/cours/24-la- ... ndamentaux

C'est pour php4 mais la base reste valable.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 82 Messages

25 févr. 2012, 02:42

Merci pour ta réponse..

Si je fais des fonctions, le problème reste le même il me semble. Si je veux modifier quelque chose dans mon formulaire (par exemple ajouter un champs), je dois le faire dans tous les formulaires, alors que ces derniers sont presque pareil. Y a-t-il une solution pour rendre le tout plus simple? Pour le moment, j'ai fait un switch (si le doc est public ou privé). Dans les deux partie du switch, j'ai le même formulaire avec les mêmes champs, cependant dans un des deux, les champs sont obligatoires donc en gras et dans l'autre non. Pour la vérification c'est pareil, c'est un switch.. Je me retrouve donc avec un code en double (et je ne parle que de la page "envoyer").

Quelle serait la solution pour améliorer ça?

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 févr. 2012, 11:05

Pour ton code en double, si j'ai bien compris tu as :
switch($isprivé):
case oui: 
 //génération des champs HTML
case non:
 //génération des champs HTML (les mêmes) mais certains en gras
Pourquoi ne pas faire :
function genererChampsHTML($options)
{
    //fabrication du champ avec l'option gras ou non pour chaque champ (avec une boucle)
    return $champs;
}
et de l'autre côté :
// true = champ en gras
$optionsSiOui = array('champ1' => false, 'champ2' => true);
$optionsSiNon = array('champ1' => true, 'champ2' => true);

switch($isprivé):
case oui: 
 //génération des champs HTML
  genererChampsHTML($optionsSiOui);
case non:
 //génération des champs HTML (les mêmes) mais certains en gras
  genererChampsHTML($optionsSiNon)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 févr. 2012, 11:49

// true = champ en gras
$optionsSiOui = array('champ1' => false, 'champ2' => true);
$optionsSiNon = array('champ1' => true, 'champ2' => true);

switch($isprivé):
case oui: 
 //génération des champs HTML
  genererChampsHTML($optionsSiOui);
case non:
 //génération des champs HTML (les mêmes) mais certains en gras
  genererChampsHTML($optionsSiNon)
Encore mieux :
// true = champ en gras
$options = ($isPrive === "oui") ? array('champ1' => false, 'champ2' => true) : array('champ1' => true, 'champ2' => true);

genererChampsHTML($options);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 82 Messages

27 févr. 2012, 13:24

Merci beaucoup, je vais regarde ça.. Le problème est aussi que les champs ne sont pas dans le même ordre si c'est un doc public ou privé (enfin, 1 champs change).

Et pour ce qui est de la vérification du formulaire?

Merci beaucoup

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 févr. 2012, 16:44

Ben même technique pour la vérification du formulaire.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 2577 Messages

29 févr. 2012, 16:46

J'ai l'habitude (mauvaise ?) d'utiliser des objets pour les paramètres de mes fonctions à la manière des records de certains langages. Je garde une logique fonctionnelles à ces objets comme "personne", "news"... Ca permet de passer un unique paramètre à la fonction au lieu de plusieurs et il est plus facile d'ajouter une propriété à l'objet qu'un paramètre à une fonction appelée à plein d'endroits.

J'utilise aussi les objets pour regrouper des fonctions (sous forme statique).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 févr. 2012, 19:54

Un objet "personne" qui décrit. Une personnne , un objet news qui décrit une news, ça ne me paraît trop bête.

D'ailleurs si l'on modélise les applications (avec ce genre de chose entre autre) c'est que ça doit être bien ;)

C'est une bonne pratique, que tu peux entre à toute l'application (pour la
Démarche de modélisation y a celle prosé par Craig larman. Un peu verbeuse voir beaucoup mais semble complète ).


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

01 mars 2012, 10:56

Je voulais souligner que l'on pouvait faire de l'objet sans s'embêter avec toute la théorie pour commencer.

Lorsque l'on commence par créer un objet comme "personne" et qu'on l'utilise comme paramètre des fonctions, on se rend compte rapidement que c'est pratique et que ca permet de limiter les variables globales. On en voit rapidement l'intéret et ca limite l'aspect fumeux qui fait peur.