Jean-Paul Dècle
PHP Outils et techniques de développement
Des clés pour comprendre
PHP : Outils et techniques de développement
1 Les outils du développeur PHP •
Développement HTML : NVU
https://sourceforge.net/projects/portablenvu/ •
Feuilles de style CSS : TopStyle
http://www.newsgator.com/Individuals/TopStyle/Default.aspx •
Kit d’installation Apache, PHP, MySQL o XAMPP
www.apachefriends.org/fr/xampp-windows.html o
WAMP
http://www.wampserver.com/download.php o
EasyPHP
http://www.easyphp.org •
Environnement d’interface de développement (IDE) : o Dev-PHP http://devphp.sourceforge.net/ o Eclipse
http://www.eclipse.org/downloads/index.html •
Plugin PHPeclipse
Framework PHP utilisé dans cette formation : o CakePHP
http://cakephp.org •
Logiciel d’auto-documentation PHP : o phpDocumentor (appelé parfois phpdoc ou phpdocu)
http://www.phpdoc.org/ •
Contrôle de versions : o Subversion (SVN)
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID= 91
Page 2 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement Utilisation de la classe
<? require("Personne.inc.php"); $nom="Dupont"; $prenom="Jean"; // Construction d'un objet de type Personne $personne = new Personne($nom,$prenom); // Afficher les informations $personne -> afficher(); ?>
L'héritage L'héritage permet de transférer des propriétés d'une classe (ses attributs et ses méthodes) vers une sous-classe (la sous-classe héritant de la classe principale). L'avantage principal de l'héritage est qu'il permet de d'éviter la duplication de code, et il encourage à la réutilisation de même code. Création d'une classe dérivée
<? require ("Personne.inc.php"); class Locataire extends Personne { var $loyer; var $datebail; function Locataire($l, $d, $n, $p) $this->loyer = $l; $this->datebail = $d; $this->Personne($n, $p); }
{
function afficher() { // appel de la méthode afficher() de la super-classe parent::afficher(); echo "Loyer mensuel: $this->loyer <br>"; echo "Date de signature du bail: $this->datebail; } } // fin classe Locataire ?>
Exercice Créez un programme PHP qui affichera toutes les informations concernant un locataire:
Page 3 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
4 Gestion de XML en PHP5 En PHP5,
les principales classes du DOM sont les suivantes : DomNode - objet nœud : documents, éléments, nœuds textuels... DomDocument - objet document (hérite de DomNode) DomElement - objet élément (hérite de DomNode) DomAttr - objet attribut (hérite de DomNode) DomNodeList - objet liste de DomNodes (ce n'est pas un tableau PHP !)
Le document DomDocument Tout traitement de XML devrait commencer par la ligne suivante, qui instancie un objet DomDocument: <?php $dom = new DomDocument(); ?> Pour charger un document XML à partir d'un fichier: <?php $dom->load('fichier.xml'); ?> Pour charger un document XML à partir d'une variable: <?php $dom->loadXML($chaineXML); ?> Il sera possible d'enregistrer le document XML de la manière suivante : <?php $dom->save('nouveauFichier.xml'); ?> L'extension DOM autorise la validation d'un document relativement au document DTD spécifié dans le document XML : <?php $dom->validate(); ?>
Page 4 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement Modifier un document La méthode DomDocument::createElement permet de créer des éléments XML, en passant en paramètre le nom du nœud: <?php $nouveauPays = $dom->createElement("pays"); ?> $nouveauPays pointe maintenant vers un nouvel élément "pays". Il a été créé, mais n'a pas été intégré au document. Pour ajouter un nœud textuel à cet élément, il faut appeler DomDocument::createTextNode. <?php $nomPays = $dom->createTextNode("Royaume-Uni"); ?> Le nœud textuel est créé, mais pas intégré au document, ni même rattaché à notre nouvel élément. Pour insérer le nouveau nœud au document, on utilise la méthode DomNode::appendChild. DomNode::appendChild ajoute le nœud passé en paramètre à la liste des enfants du nœud sur lequel il est appelé. Le script suivant ajoute le nœud textuel $nomPays à notre nouveau nœud $nouveauPays, et ajoute ensuite celui-ci au nœud "europe": <?php $nouveauPays->appendChild($nomPays); $europe = $dom->getElementsByTagName("europe")->item(0); $europe->appendChild($nouveauPays); ?> La méthode DomNode::removeChild permet de supprimer un nœud: <?php $europe->removeChild($nouveauPays); ?>
Page 5 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
Utilisation de SimpleXML L'extension SimpleXML fournit des outils très simples et faciles à utiliser pour convertir du XML en un objet qui peut être manipulé avec ses propriétés et les itérateurs de tableaux.
L'extension SimpleXML requiert PHP 5. L'extension SimpleXML est activé par défaut. Pour la désactiver, utilisez l'option de configuration --disable-simplexml.
nouvelles.xml <?xml version="1.0" encoding="ISO-8859-1"?> <nouvelles> <nouvelle> <contenu> Mercredi: IDE – Les fichiers XML </contenu> <date>26/12/2007</date> </nouvelle> <nouvelle> <contenu> Jeudi: Les frameworks: Le modèle MVC </contenu> <date>27/12/2007</date> </nouvelle> </nouvelles> nouvelles.php <?php $nouvelles = simplexml_load_file('nouvelles.xml'); foreach($nouvelles->nouvelle as $nouvelle) { echo 'Programme : ' ,utf8_decode($nouvelle->contenu).'<br>'; echo 'Date : ' ,$nouvelle->date.'<br>'; } ?> Remarque: utf8_decode: Convertit une chaîne UTF-8 en ISO-8859-1 La méthode xpath permet de pointer directement un nœud spécifique: <? $nouvelles = simplexml_load_file('nouvelles.xml'); $xpath = '/nouvelles/nouvelle/contenu'; $nouvelle = $nouvelles->xpath($xpath) ; foreach( $nouvelle as $news ) { echo "<li>"; echo utf8_decode($news); echo "</li>"; } ?>
Page 6 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
5 Utiliser l'architecture MVC dans les applications web/php Le modèle MVC (Modèle-Vue-Contrôleur) cherche à séparer nettement les couches présentation, traitement et accès aux données. Une application web respectant ce modèle sera architecturée de la façon suivante :
Le traitement d'une demande d'un client se déroule selon les étapes suivantes : 1. le client fait une demande au contrôleur. Ce contrôleur voit passer toutes les demandes des clients. C'est la porte d'entrée de l'application. C'est le C de MVC. 2. le contrôleur traite cette demande. Pour ce faire, il peut avoir besoin de l'aide de la couche métier, ce qu'on appelle le modèle M dans la structure MVC. 3. le contrôleur reçoit une réponse de la couche métier. La demande du client a été traitée. Celle-ci peut appeler plusieurs réponses possibles. Un exemple classique est une page d'erreurs si la demande n'a pu être traitée correctement une page de confirmation sinon 4. le contrôleur choisit la réponse (= vue) à envoyer au client. Celle-ci est le plus souvent une page contenant des éléments dynamiques. Le contrôleur fournit ceux-ci à la vue. 5. la vue est envoyée au client. C'est le V de MVC. Une telle architecture est souvent appelée architecture 3-tiers ou à 3 niveaux.
Page 7 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
6 Les Frameworks PHP Les fonctionnalités d’un Framework On retrouve les fonctionnalités suivantes dans de nombreux frameworks PHP. 1. Modèle MVC Le modèle Modèle Vue Contrôleur est très répandu dans le développement d’applications et occupe également une place importante dans le développement web. Il permet de structurer une application en distinguant la partie présentation d’une part et le code applicatif d’autre part, ce qui facilite le développement en équipe, la relecture et la maintenance.
Dans le contexte d’une application web, on obtient les éléments suivants : Modèle : ce sont les données manipulées par le site (par exemple, les données stockées dans la base) ;
Vue : ce sont les différentes pages du site, qui affichent les informations. Le rôle de « vue » est généralement rempli par des templates.
Contrôleur : le traitement des actions utilisateurs. Dans un contexte web, on utilise généralement un contrôleur frontal (Front-Controller) qui reçoit directement les requêtes utilisateur (URL et paramètres) et qui se charge d’exécuter le code adapté :les actions.
Le modèle MVC a fait depuis longtemps ses preuves dans le monde Java avec Struts, Spring, WebWork ….
Page 8 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
Les bibliothèques de composants PEAR (PHP Extension and Application Repository)
http://pear.php.net/packages.php Pear est un référentiel de composants open source réutilisables pour PHP. Ces composants utilisent tous les mêmes normes de formatage et de documentation (au format phpDocumentor). 1. Installation de Pear Pear inclut un système de distribution et de maintenance utilisable en ligne de commande. Il permet d’installer de nouveaux composants et de mettre à jour les composants déjà installés. Certains frameworks, même s’ils ne s’appuient pas forcément sur les composants Pear, utilisent tout de même son système de distribution pour gérer l’installation et la mise à jour. Pear est présent dans chaque distribution de php, un simple script permet de lancer l’installation. Pear s’installe au même niveau que l’interpréteur php, ce qui rend son installation plus complexe lorsqu’on ne dispose pas d’un accès complet au serveur. 2. Composants Les composants Pear sont développés principalement pour PHP4 (mais sont compatibles avec PHP5) et se décomposent en packages dans plusieurs grandes catégories : Authentication, Benchmarking, Caching, Configuration, Console, Database, Date and Time, Encryption, Event, File Formats, File System, Gtk, Gtk2, HTML, HTTP, Images, Internationalization, Logging, Mail, Math, Networking, Numbers, Payment, PEAR, PEAR Website, PHP, Processing, Science, Semantic Web, Streams, Structures, System, Text, Tools and Utilities, Validate, Web Services, XML. Certains composants tels que ceux des packages GTK utilisés pour construire des applications de type client lourd sont plutôt spécifiques, mais on trouvera des composants pour la plupart des fonctionnalités proposées par les frameworks récents :
Pear:: Pear:: Pear:: Pear:: Pear:: Pear:: Pear::
Cache_Lite Système de cache LiveUser Système de gestion des droits utilisateur Flexy Moteur de template DB (pour l’indépendance vis à vis des bases de données) DB_DataObject (pour la fonction d’ORM) SOAP Accès aux webservices Translation2 Création de sites multilingues.
Pear inclut de nombreux packages qui ne sont plus maintenus mais sont toujours listés. Un avertissement est présent dans la paged’information des packages concernés.
Page 9 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement Exemple Pear:Flexy Code PHP : Initialisation de Flexy et transmission des données à afficher : <?php require_once 'HTML/Template/Flexy.php'; require_once 'PEAR.php'; // Définition des chemins d’accès et de compilation $options = array( 'templateDir' => '/var/www/myapp/templates', 'compileDir' => '/var/www/myapp/compiled_templates' ); class exemple_template { // Déclaration des données à afficher var $comments = array( array("id"=>1, "title"=>"Titre 1"), array("id"=>2, "title"=>"Titre 2"), array("id"=>3, "title"=>"Titre 3") ); function exemple_template () { //Initialisation de Flexy $output = new HTML_Template_Flexy($options); //Compilation de la template $output->compile(“template.html”); // Exécution $output->outputObject($this); } } new exemple_template(); ?> Template : <h1 class="pageTitle">Commentaires</h1> <table > <tr> <th>Id</th><th>Titre</th> </tr> <tr flexy:foreach="comments,comment"> <td>{comment[id]}</td><td>{comment[title]}</td> </tr> </table>
Page 10 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de dĂŠveloppement
Liste non exhaustive des Frameworks PHP Voir: http://www.developpez.net/forums/showthread.php?t=84784 WACT (http://www.phpwact.org/) Phrame (https://www.phrame.org/) PRADO (http://www.xisc.com/) Seagull (http://seagull.phpkitchen.com/) Copix (http://copix.aston.fr/) php.MVC (http://www.phpmvc.net/) Mojavi (http://www.mojavi.org/) CakePHP (http://cakephp.org/) BlueShoes (http://www.blueshoes.org/) Symfony (http://www.symfony-project.com/) Ambivalence (http://amb.sourceforge.net/) binarycloud (http://www.binarycloud.com/) phpwebtk (http://phpwebtk.sourceforge.net/) rwfPHP (http://www.rwfphp.org/) InterJinn (http://www.interjinn.com/) Ismo (http://ismo.sourceforge.net/) Medusa (http://medusa.tigris.org/) Studs (http://mojavelinux.com/projects/studs/) Castor ( http://castor.2le.net ) Solar_App (http://solarphp.com/) YellowDuck Framework (http://ydframework.berlios.de/) Xaraya (http://www.xaraya.com) PHP2Go (http://php2go.sourceforge.net/) P4A (http://p4a.sourceforge.net/) Zoop (http://www.zoopframework.com)
Page 11 sur 12 jpdecle@hotmail.com
PHP : Outils et techniques de développement
7 Les Frameworks PHP : CakePHP pas à pas L'application proposée permet de lire des informations issues d'une base de données.
Etape 1/12 Création de la table des messages CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL ); /* Ajout de quelques données */ INSERT INTO posts (title,body,created) VALUES ('Introduction à PHPeclipse', 'Cette présentation fut passionnante.', NOW()); INSERT INTO posts (title,body,created) VALUES ('MVC', 'Créer une application Modèle-Vue-Contrôleur', NOW()); INSERT INTO posts (title,body,created) VALUES ('CakePHP', 'Bravo pour cette présentation!', NOW());
Etape 2/12 Configurer la base de données 1. Ouvrir le fichier /app/config/database.php.default 2. Modifier le fichier de la façon suivante: var $default = array('driver' 'connect' 'host' 'login' 'password' 'database'
=> => => => => =>
'mysql', 'mysql_pconnect', 'localhost', 'root', '', 'cake' );
3. Sauvegarder le fichier /app/config/database.php.default sous /app/config/database.php
Etape 3/12 Vérifier mod_rewrite dans le fichier httpd.conf
Page 12 sur 12 jpdecle@hotmail.com