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] Réalisation de classe sous PHP5 pour plus de lisibilité


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut [POO] Réalisation de classe sous PHP5 pour plus de lisibilité
    Bonjour,

    Je souhaite passer un de mes (gros) sites à php5 et je veux le réécrire en orienté objet.

    Voici à quoi ressemble mon ma page index.php qui gère l'affichage de tout mon site :
    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
    	<body>
    		<?php
    			$bdd = mysql_connect ($server, $user, $pass);
    			mysql_select_db ($db, $bdd);
     
    			include "header.php";
    			include "menu_haut.php";
    			include "menu_gauche.php";
    			include "menu_droit.php";
    		?>
     
    		<div id='corps'>
    			<?php
    				include $op.'/'.$sop.'.php';
    			?>
    		</div>
     
    		<?php
    			include "footer.php";
    			mysql_close ($bdd);
    		?>
    	</body>
    J'aimerais savoir s'il serait possible et intéressant de créer un objet "page" me permettant d'inclure l'ensemble des menus, header etc... Quelque chose comme cela :
    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
    	<body>
    		<?php
    			class page ()
    			{
    				public function __construct()
    				{
    					$bdd = mysql_connect ($server, $user, $pass);
    					mysql_select_db ($db, $bdd);
    					include 'header.php';
    					include 'menu_haut.php';
    					include 'menu_gauche.php';
    					include 'menu_droit.php';
    				}
     
    				public function __destruct()
    				{
    					include 'footer.php';
    					mysql_close ($bdd);
    				}
     
    				public function affichage($op, $sop='index')
    				{
    					include $op.'/'.$sop.'.php';
    				}
    			}
    			$page=new page();
    		?>
     
    		<div id='corps'>
    			<?php
    				page->affichage($_GET['op'],$_GET['sop']);
    			?>
    		</div>
     
    		<?php
    			page->__destruct();
    		?>
    	</body>
    L'avantage pour moi serait d'avoir un code plus propre (je mets ma classe dans un fichier, et mon fichier index.php est tout de suite plus lisible)...

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    page->__destruct();
    On n'appelle jamais soit même un destructeur. C'est php qui se charge d'appeler automatiquement cette méthode à la fin du script pour les objets qui existent encore. Pour détruire un objet à tout moment, on peut utiliser unset() ou lui ôter sa dernière référence (plus de variable qui pointe sur l'objet).

    J'aimerais savoir s'il serait possible et intéressant de créer un objet "page" me permettant d'inclure l'ensemble des menus, header etc... Quelque chose comme cela
    Oui ça peut être intéressant. En poussant un peu plus loin, on tombe sur la notion de "page controller" qu'on retrouve dans certaines architectures MVC.

    je mets ma classe dans un fichier, et mon fichier index.php est tout de suite plus lisible
    Attention à ne pas mettre de html dans le fichier php de ta classe. Les classes sont faites pour être réutilisées/dérivées etc, et c'est donc très peu probable qu'on ait toujours besoin du html qui vient avec ; )

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Pourrais-tu m'en dire un peu plus sur la non intégration du code html (par exemple en montrant ce que ça donnerait ici -> http://www.developpez.net/forums/sho...65#post1768765 je pense que ce serait vraiment intéressant, j'aimerais prendre des bonnes habitudes tant que je suis entrain d'apprendre )

  4. #4
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Voila ce que ça donne :

    /test/index.php5
    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
    <?php
    	require ('session.php5');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html>
    	<head>
    		<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    		<meta http-equiv="content-language" content="fr" />
    		<title>Test</title>
    		<meta name="keywords" content="" />
    		<link rel="shortcut icon" href="/test/favicon.ico" />
    		<link rel="stylesheet" href="/test/style.css" />
     
     
    </style>
    	</head>
     
    	<body>
    		<div id="page">
    		<?php
    			function __autoload($classe)
    			{
    				require_once ($_SERVER['DOCUMENT_ROOT'].'/test/classes/'.strtolower($classe).'.php5');
    			}
     
    			$page=new page();
    		?>
     
    		<div id="corps">
    			<?php
    				$page->affichage($_GET['op'], $_GET['sop'], $_GET['ssop']);
    			?>
    		</div>
    	</body>
    </html>
    /test/classes/page.php5
    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
    <?php
    	class page
    	{
    		public function __construct()
    		{
    			require ('config.php5');
    			$bdd = mysql_connect ($server, $user, $pass);
    			mysql_select_db ($db, $bdd);
    			require ('header.php5');
    			require ('menu_haut.php5');
    			require ('menu_gauche.php5');
    			require ('menu_droit.php5');
    		}
     
    		public function __destruct()
    		{
    			require 'footer.php5';
    			mysql_close ();
    		}
     
    		public function affichage($op, $sop, $ssop)
    		{
    			if (isset($ssop))
    			{
    				require $sop.'/'.$op.'/'.$ssop.'.php5';
    			}
    			else
    			{
    				require $op.'/'.$sop.'.php5';
    			}			
    		}
    	}
    ?>
    J'utilise l'url-rewriting, voici mon /test/.htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^([a-z]+)/([a-z]+)\.html$ /test/index.php5?op=$1&sop=$2&ssop=index [L]
    RewriteRule ^([a-z]+)/([a-z]+)-([a-z]+)\.html$ /test/index.php5?op=$1&sop=$2&ssop=$3 [L]
    RewriteRule ^([a-z]+)\.html$ /test/index.php5?op=$1&sop=index [L]
    RewriteRule ^([a-z]+)-([a-z]+)\.html$ /test/index.php5?op=$1&sop=$2 [L]
     
    DirectoryIndex construction.php index.php
    Je vous passe les fichiers annexes genre header.php etc, qui sont tous vides pour le moment :p
    Grâce à ce code, j'ai accès à toutes les pages de mon site, et à leur administration. Le tout avec des url qui me semblent propres...
    Mes questions :
    1/ Y a-t'il des points à améliorer, par exemple pour rendre le code plus facilement réutilisable?
    2/ Aurais-je commis des erreurs (pas des erreurs de syntaxe puisque mon code marche, mais des erreurs de logique)... C'est mon premier code en php5 et la première fois aussi que j'utilise l'url-rewriting, donc c'est tout à fait possible...
    3/ Pourquoi suis-je obligé de mettre l'url de mon fichier css en adressage absolu? Si je le mets en relatif, le serveur ne trouve pas le fichier, alors que sans l'url-rewriting, il le trouve :S
    4/ Enfin, pensez-vous qu'il serait intéressant de poster le code quelque part, une fois fini (pour en faire profiter d'autres, après tout beaucoup de sites pourrait utiliser cet objet)?

  5. #5
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    1/ Enlève tout ce qui fait du ouptut (html) et include de la méthode __destruct(), car dans bien des cas, si ce n'est pas toi-même qui détruit l'objet avant la fin du script, l'environnement php n'est plus dans un état correctement déterminé (voir la doc)

    2/ Si ça fonctionne comme tu le désirs, c'est l'essentiel

    3/ Car le browser va chercher le css à une location relative à l'url non réécrite. Le browser ne connaît rien du méchanisme de réécriture coté server.

    4/ Pourquoi pas. Ca n'engage que toi ; )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Destruction d'une classe sous PHP5
    Par ctrl+z dans le forum Langage
    Réponses: 8
    Dernier message: 12/01/2009, 09h32
  2. [POO] BD et Classe en php5
    Par AsQuel dans le forum Langage
    Réponses: 8
    Dernier message: 02/03/2007, 15h01
  3. [POO] Qui a migré sous PHP5
    Par mazenovi dans le forum Langage
    Réponses: 16
    Dernier message: 09/11/2005, 10h43
  4. Réponses: 3
    Dernier message: 19/05/2005, 10h46
  5. [Système][Class-Path]cherche aide sous java pour fedoracore ou linux
    Par mickey hollywood dans le forum Général Java
    Réponses: 4
    Dernier message: 29/03/2005, 01h13

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