Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2007, 14h15   #1
Membre à l'essai
 
Inscription : juillet 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 38
Points : 24
Points : 24
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 :
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 :
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 :
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 ?).
FredPont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 15h52   #2
Membre éclairé
 
Avatar de genova
 
Inscription : septembre 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 487
Points : 397
Points : 397
Envoyer un message via MSN à genova
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.
genova est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 16h26   #3
Membre à l'essai
 
Inscription : juillet 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 38
Points : 24
Points : 24
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.
FredPont est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h28.


 
 
 
 
Partenaires

Hébergement Web