IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Avis structure développement objet


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 34
    Points
    34
    Par défaut [POO] Avis structure développement objet
    Salut tout le monde,

    J’essaye de me mettre au développement objet en PHP, pour m'entrainer j'ai essayé de développer une (très) petite applis.
    Edit :
    J'ai oublié de dire quel est le but de cette applis :
    En gros elle permet d'ajouter un mail a la fois dans une base mysql (pour le serveur de messagerie) et dans un annuaire ldap via un formulaire. Rien de très complexe c'est histoire de comprendre les bases.

    J'ai d'abord cherché à réalisé une structure que je pourrai réutiliser facilement pour de plus gros projet.

    Je me suis inspiré du projet 'QuickSilver Forums', en essayant de simplifier au maximum et voilà ce que ça donne :

    D'abord la structure des répertoires :

    |-Racine\
    |-inc\ contient des classes de bdd et le moteur de template
    | |-ldap.php
    | |-mysql.php
    | |-template.php
    |-func\ contient des classes héritées de la classe globale (les différentes fonctions de l'Apps)
    | |-post.php classe qui gère le formulaire l'ajout modification de mail
    | |-list.php classe la liste des mails
    | |- ...
    |
    |-tpl\
    | |-post.tpl
    | |- ...
    |
    |-index.php le point d'entrée de l'Apps
    |-global.php la classe globale de l'Apps

    Détail des fichiers :

    index.php
    ------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    /* j'appelé ici les fichiers pour créer (instancier??) les objets */
    require('../../inc/ldap.php');
    require('../../inc/mysql.php');
    require('../../inc/template.php');
     
     
    /* je créer les objets (ldap, mysql, template) */
    $ldapmail = new act_ldap;
    $dbmail = new hmail;
    $template = new template('./tpl');
     
    /* je fait appel à ma classe principale */
    require ('global.php');
     
     
    /* les fonctions qui pourront être utilisée 
    $modules['default_module'] = 'listmail';
    $modules['public_modules'] = array(
    	'post',
    	'list');
     
     
     
    /* via l'url je passe un paramêtre ($_GET['a'] qui précise quelle fonction je veux utiliser */
    /* ex. index.php?a=post */ 
    if (!isset($_GET['a']) || !in_array($_GET['a'], array_merge($modules['public_modules']))) 
    	{
    	$module = $modules['default_module'];
    	}
    	else 
    	{
    	$module = $_GET['a'];
    	}
     
    /* si cette fonction est autorisé je charge le fichier correspondant */
    require('func/'.$module.'.php');
     
     
     
    /* je créer l'objet relatif à ma fonction */
    $m = new $module($ldapmail,$dbmail,$template);
     
    /* je l'excute */
    $m->execute(); //---> détail dans le fichier post.php
    ------------------------------------------------

    global.php
    ------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class messagerie {
     
    	var $dbmail;			//mon objet mysql pour le serveur de messagerie
    	var $ldapmail;			//mon objet pour le serveur ldap
    	var $get     = array();         //le contenu de la variable $_GET
    	var $post    = array();         //le contenu de la variable $_POST
    	var $template;			//Mon objet pour le moteur de template
     
     
    /* Constructeur : j'initialise mes objet ??? */
     
    	function messagerie ($ldapmail=null,$dbmail=null,$template) {
    		$this->dbmail = $dbmail;
    		$this->ldapmail = $ldapmail;
    		$this->template = $template;
    		$this->get = $_GET;
    		$this->post = $_POST;
    		}
    }
    ------------------------------------------------

    post.php
    ------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    class post extends messagerie {
     
    /* Suivant un paramètre dans l'url cette on exécute une des fonctions de la classe */
    	function execute() {
    		if(isset($this->get['f']))
    			{
    			switch($this->get['f'])
    				{
    				case 'new':
    				$this->newMail();
    				break;
    				case 'mod':
    				$this->modMail();
    				break;
    				}
    			}
     
     
     
    /* Cette fonction créer un nouveau mail (insertion dans ldap et mysql) */
    	function newMail() {
    		//initialisation des variables
    		$nom = '';
    		$prenom = '';
    		$nMail = '';
     
    		if (isset($this->post['submit'])) //si l'utilisateur tente d'envoyer le formulaire
    			{
     
    			//recuperation des variables
    			$nom = $this->post['nom'];
    			$prenom = $this->post['prenom'];
    			$nMail = $this->post['nMail'];
     
     
    			//construction des données ldap
    			$info['mail']=$nMail;
    			$info['sn']=$nom;
    			$info['givenName']=$prenom;		
    			$dn = 'cn='.$nom.' '.$prenom.'ou=Mail';
     
     
    			//insertion des données
    			$this->ldapmail->bind();
    			$insLdap = $this->ldapmail->addUser($dn,$info);
    			$insHmail = $this->dbmail->insertMail($domId,$nMail,$passMail);
    			}
     
    		//initialisation du fichier pour le moteur de template		
    		$this->template->set_filenames(array('post' => 'post.tpl'));		
    		//envoi des variables au template
    		$this->template->assign_vars(array(
    	'nom' => $nom,
    	'prenom' => $prenom,
    	'nMail' => $nMail,
    	'titreForm' => 'Création d\'une nouvelle adresse',
    	'actionForm' => 'index.php?a=post&f=new',
    	'submitForm' => 'Valider'));
    		//affichage du template
    		$this->template->pparse('post');
    		}
    ------------------------------------------------

    J'aimerais avoir vos critiques là dessus.

    De plus j'ai quelques questions ?
    - J'ai l'impression que ma classe globale n'a pas vraiment d'intérêt ?
    - la gestion des template ne me parait pas optimal (utiliser une partie dans la classe globale ?).

  2. #2
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Bonjour, difficile de donner un avis mais globalement je trouve l'idée de la pseudo frame bonne (avec l'entrée unique via index.php), l'héritage de cette classe "principale" par toutes les pages du site très bonne.

    Pour ton dossier tpl/, à la limite autant créer un sous dossier par thème si tu prévoies plusieurs thèmes ?

    Si tu codes en PHP5 (ce que je te conseil), fait en sorte de pouvoir charger tes classes dynamiquement à l'aide de la fonction __autoload().

    Utilise PDO si ce n'est pas déjà fait pour ta base de donnée.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par genova
    Si tu codes en PHP5 (ce que je te conseil), fait en sorte de pouvoir charger tes classes dynamiquement à l'aide de la fonction __autoload().

    Utilise PDO si ce n'est pas déjà fait pour ta base de donnée.
    Merci pour la reponse :

    - Pour le moment je code en PHP4 mais je vais me renseigner sur la fonction __autoload().

    - Pour PDO, je ne l'utilise pas ici mais je l'ai déja utilisé pour un autre projet (non objet) donc je l'intègrerai par la suite.

Discussions similaires

  1. Conseils sur la méthode de développement objet métier
    Par RamDevTeam dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 18h14
  2. [POO] [AVIS] L'utilité des classes
    Par Anduriel dans le forum Langage
    Réponses: 66
    Dernier message: 10/11/2005, 16h45
  3. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05
  4. [POO] Coordonée d'un objet
    Par JHelp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 16h59
  5. [POO] Rendre invisible un objet Flash en Javascript
    Par tafkap dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/10/2004, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo