Formation Zend Studio / Zend Platform, Standards de codage, migration PHP 5 & gestion de versions Arawak
Copyright Š 2007, Zend Technologies Inc.
Programme • • • • • •
Zend Studio Zend Platform pour les développeurs Standards de codage La PHPDoc Migration vers PHP 5 La gestion des versions avec Subversion
Copyright ©2007 Zend Technologies, Inc.
#2
Zend Studio: Introduction
Copyright Š 2007, Zend Technologies Inc.
Zend Studio: Introduction
Fonctionnalités Colorisation syntaxique personnalisable Gestionnaire de fichiers
Client FTP
Complétion de code PHP
Mise en évidence des erreurs en temps réel
Inspecteurs
Copyright ©2007 Zend Technologies, Inc.
#4
Zend Studio: Introduction
Intégration de Internet Explorer Barre d'outils de débogage
Cycle de débogage complet depuis Zend Studio
Consultez le manuel PHP depuis Zend Studio
Copyright ©2007 Zend Technologies, Inc.
#5
Zend Studio: Introduction
Gabarits
Les gabarits vous permettent de travailler plus rapidement, avec moins de risque d'erreurs de frappe (menu Outils >
Personnalisation)
Copyright Š2007 Zend Technologies, Inc.
#6
Zend Studio: Introduction
Assistant PHPDocumentor En utilisant l'assistant PHPDocumentor, vous pouvez facilement générer la documentation API de votre Ajouter des application fichiers Ajouter des répertoires Ajouter les fichiers qui ne doivent pas être inclus
Copyright ©2007 Zend Technologies, Inc.
#7
Zend Studio: Introduction
Assistant PHPDocumentor
Copyright Š2007 Zend Technologies, Inc.
#8
Zend Studio: Introduction
Assistant PHPDocumentor
Copyright Š2007 Zend Technologies, Inc.
#9
Zend Studio: Editeur
Copyright Š 2007, Zend Technologies Inc.
Zend Studio: Editeur
Intégration PHPDoc • Les commentaires PHPDoc sont utilisés pour: Décrire comment l'élément est utilisé dans le code de l'application Générer la documentation API du projet via PHPDocumentor Générer des commentaires structurés pour la complétion de code dans Zend Studio
Copyright ©2007 Zend Technologies, Inc.
# 11
Zend Studio: Editeur
Intégration PHPDoc • En utilisant le droit clic dans l'inspecteur d'objets
• Par la complétion de code: tapez /** puis <ENTREE>
Copyright ©2007 Zend Technologies, Inc.
# 12
Zend Studio: Editeur
Intégration PHPDoc, exemple
Copyright ©2007 Zend Technologies, Inc.
# 13
Zend Studio: Editeur
Complétion de code • Accès facile aux:
Classes Fonctions Variables Constantes Mots-clés Balises HTML Attributs Valeurs d'attributs etc...
Copyright ©2007 Zend Technologies, Inc.
# 14
Zend Studio: Editeur
Complétion de code • Complétion de code HTML
• Complétion de code PHP: Complétion de code pour les fonctions imbriquées Complétion de code pour les valeurs de retour d'une fonction ou méthode (en utilisant PHPDoc)
Copyright ©2007 Zend Technologies, Inc.
# 15
Zend Studio: Editeur
Complétion de code • Indice pour la complétion de code PHP: Ajoutez une balise @var comme indice au type de
classe En utilisant un commentaire, vous pouvez précisément indiquer le type de classe d'une variable:
Copyright ©2007 Zend Technologies, Inc.
# 16
Zend Studio: Editeur
Complétion de code la classe ClasseDeComplétion
Sans commentaires PHPDoc
Avec commentaires PHPDoc
Copyright ©2007 Zend Technologies, Inc.
# 17
Zend Studio: Editeur
Signets
Utilisez les signets dans le document actif pour marquer des lignes de code (par clic droit sur la marge à hauteur de la ligne ou en appuyant sur la touche <F2>)
Signet
Signet Signet
Commentaire du signet
Signet
Cette fonctionnalité vous permet de naviguer plus rapidement dans le code en utilisant la combinaison de touches <CTRL> + <F2> ou en cliquant sur les indicateurs de signet dans l'ascenseur de droite En passant sur le signet avec la souris, on obtient la description Copyright ©2007 Zend Technologies, Inc.
# 18
Zend Studio: Editeur
Signets
Gérez vos signets avec le gestionnaire de signets
Ajoutez des descriptions à vos signets
Copyright ©2007 Zend Technologies, Inc.
# 19
Zend Studio: Editeur
Exercices
• Compléter la phpdoc de l'application que nous avons installé pour le cours Zend Studio. • Repérer une fonction qui renvoit une classe dans le code fourni, compléter la phpdoc pour renseigner quel type de classe cette fonction renvoit. • Générer la phpdoc dans un dossier "phpdoc" à la racine de l'application. • Tester l'utilisation des signets.
Copyright ©2007 Zend Technologies, Inc.
# 20
Zend Studio : Travailler Avec Des Projets
Copyright Š 2007, Zend Technologies Inc.
Travailler Avec des Projets
Créer un nouveau projet Création d'un nouveau projet
L'assistant vous guide pour déterminer les propriétés de votre nouveau projet
Copyright ©2007 Zend Technologies, Inc.
# 22
Travailler Avec des Projets
Utilité de définir un projet • Quelle est l'utilité de créer un projet ?
Débogage Complétion de code Contrôle des versions des fichiers du projet Une seule arborescence pour tous les fichiers avec lesquels vous devez travailler
Copyright ©2007 Zend Technologies, Inc.
# 23
Travailler Avec des Projets
Ajouter des fichiers Ajouter des fichiers Ă un projet
Copyright Š2007 Zend Technologies, Inc.
# 24
Travailler Avec des Projets
Les Inspecteurs
• Le panneau d'inspecteurs est utilisé pour mapper •
graphiquement des éléments de code Les éléments de code représentables sont:
Noms de classes Propriétés de classes Constantes de classes Méthodes de classes Fonctions Constantes Fichiers "Include" Clients SOAP
Copyright ©2007 Zend Technologies, Inc.
# 25
Travailler Avec des Projets
Les Inspecteurs
• Il existe trois onglets d'inspecteurs: Onglet d'Inspecteur de fichiers: affiche
dans une arborescence tous les éléments de code représentables déclarés dans le fichier en cours d'édition
Onglet d'Inspecteur de projet: tous les
éléments de code dans les fichiers du projet ou les fichiers ouverts dans l'editeur
Onglet PHP: toutes les classes et fonctions PHP – tapez F1 pour ouvrir le manuel PHP
Copyright ©2007 Zend Technologies, Inc.
# 26
Travailler Avec des Projets
Exercices
• Créer un projet contenant l'application fournie. • Définir les propriétés du projet comme suit : Encoding UTF-8 Débogueur interne
Copyright ©2007 Zend Technologies, Inc.
# 27
Zend Studio : Débogage
Copyright © 2007, Zend Technologies Inc.
Zend Studio: Débogage
Débogueur interne • Débogueur interne Zend Studio installe ses propres versions de PHP – 4 & 5, avec
lesquels vous pouvez déboguer vos scripts Le débogueur interne est une suite d'outils qui permettent au développeur de déboguer ses applications avant leur mise en ligne
Copyright ©2007 Zend Technologies, Inc.
# 29
Zend Studio: Débogage
Exercice
• Changez la version PHP utilisé pour le débogage •
dans Outils > Préférences > Poste de travail Modifiez le fichier INI pour chaque version dans <répertoire d'installation de Studio>/bin/phpx
Copyright ©2007 Zend Technologies, Inc.
# 30
Zend Studio: Débogage
Serveur de débogage Zend Platform Configuration:
Zend Platform
Copyright ©2007 Zend Technologies, Inc.
# 31
Zend Studio: Débogage
Serveur de débogage • Requièrt l'installation de Zend Platform sur le serveur Web • Vous permet de déboguer des scripts plus complexes, en •
utilisant votre propre version de PHP et vos extensions, sur votre environnement Web Possibilité de déboguer des fichiers locaux ou ceux sur votre serveur
Copyright ©2007 Zend Technologies, Inc.
# 32
Zend Studio Débogage
Configuration du débogueur • Dans ZDE, ouvrez Outils > Personnalisation >
•
•
Débogage. Sélectionnez le mode de débogage "Serveur" et renseignez l'adresse de votre serveur dans le champs "URL du Serveur de Débogage" Ajoutez l'adresse IP de votre machine dans la liste des hôtes autorisés depuis l'interface utilisateur de Zend Platform, ou éditez la directive zend_debugger.allow_hosts dans votre fichier php.ini Veillez à redémarrer votre serveur Web après avoir effectué ces changements Vous pouvez également configurer ces paramètres pour chaque projet séparément en éditant les propriétés du projet: Projet > Propriétés du Projet
Copyright ©2007 Zend Technologies, Inc.
# 33
Zend Studio Débogage
Différentes façons de déboguer • Débogage URL (F8) Le retour du débogueur est rendu dans le navigateur et dans la
fenêtre « Résultat du débogage » du client Zend Studio au fur et à mesure de l'avancement du débogage Facilite le débogage de formulaires Vous permet de lancer le débogage sur des pages situés sur le serveur Web
Copyright ©2007 Zend Technologies, Inc.
# 34
Zend Studio Débogage
Différentes façons de déboguer • Bouton « Commencer le débogage » (F5) Vous permet de déboguer des fichiers locaux dans
l'environnement de votre serveur Web Les chemins relatifs dans les scripts peuvent différer – assurez vous d'ajouter tous les fichiers nécessaires à un projet dans Zend Studio
Copyright ©2007 Zend Technologies, Inc.
# 35
Zend Studio Débogage
La barre d'outils de débogage
• La barre d'outils de débogage peut être installée sous Internet Explorer et les navigateurs Mozilla (comme Firefox) Elle offre un accès facile et rapide aux fonctions de
débogage et de profilage depuis le navigateur Internet Puisqu'elle permet de lancer une session de débogage depuis le navigateur, elle est particulièrement utile pour le débogage de formulaires – toutes les valeurs saisies seront disponibles lors du débogage
Copyright ©2007 Zend Technologies, Inc.
# 36
Zend Studio Débogage
Profilage
• Synthétise les données générées par une application PHP • Représente les ressources pour chacun d'eux dans un graphique
Copyright ©2007 Zend Technologies, Inc.
# 37
Zend Studio Débogage
Profilage, Informations du profileur • Fournit des informations générales sur: La durée et la date du profilage Le nombre de fichiers appelés par l'URL demandée La répartition du temps pour les fichiers appelés
Copyright ©2007 Zend Technologies, Inc.
# 38
Zend Studio Débogage
Profilage, Fonctions statiques • Fournit des informations générales sur:
Affiche la liste
des fichiers appelés par l'URL Affiche des informations détaillés concernant les fonctions et méthodes dans les fichiers (nombre d'appels, durée d'exécution totale, ...) Copyright ©2007 Zend Technologies, Inc.
# 39
Zend Studio Débogage
Profilage, Trace d'appel • Affichage hiërarchique des fonctions selon leur ordre d'exécution
• Vous permet de:
Sauter à la fonction dans le code par doubleclic Voir l'appel à la fonction Voir la déclaration de la fonction Vérifier les détails de la fonction • ...
Copyright ©2007 Zend Technologies, Inc.
# 40
Zend Studio Débogage
Exercices
• Effectuer le profilage de l'application fournie à •
l'aide de Zend Studio et sa barre d'outils. Tester les options de débogage à partir de la barre d'outil Zend Studio.
Copyright ©2007 Zend Technologies, Inc.
# 41
Zend Studio: Fonctionnalités Supplémentaires
Navigateur SQL
Affichez les résultats d'une requête
Connectez vous sur plusieurs serveurs de bases de données simultanément Consultez le schéma, les tables et colonnes de la base de données
Exécutez des requêtes
Consultez les utilisateurs de la base de données
Copyright ©2007 Zend Technologies, Inc.
Passez facilement d'un serveur, base de données ou schéma à un autre
# 42
Zend Studio: Fonctionnalités Supplémentaires
Générateur WSDL
Le générateur de fichiers WSDL vous permet de créer facilement un service Web pour votre application (Menu Outils > Générateur WSDL)
Copyright ©2007 Zend Technologies, Inc.
# 43
Zend Studio: Fonctionnalités Supplémentaires
Versionnage
• Le versionnage est supporté pour deux logiciels de contrôle de version:
CVS http://www.nongnu.org/cvs/ Subversion http://subversion.tigris.org/ CVS et Subversion sont interchangeables et sont définis dans le menu de personnalisation: Outils > Personnalisation > Versionnage Vous devez avoir défini un projet avant de pouvoir vous servir des fonctionnalités de versionnage de Zend Studio Copyright ©2007 Zend Technologies, Inc.
# 44
Zend Platform pour les développeurs
Copyright © 2007, Zend Technologies Inc.
Zend Platform pour les développeurs
Introduction: Architecture
Copyright ©2007 Zend Technologies, Inc.
# 46
Zend Platform pour les développeurs
Module Performance
• Il existe différents niveaux pour gagner en performance
Accélération de code Optimisation de code Caching du contenu (page complète ou partielle) Zend Download Server Compression du rendu
• Le but est de réduire la charge serveur et d'améliorer •
les temps de réponse Le module Performance inclut des outils de benchmarking
Copyright ©2007 Zend Technologies, Inc.
# 47
Zend Platform pour les développeurs
Module Performance, Console • Information • •
•
serveur Dernières informations de benchmark Résumé des paramètres et statut de chaque composant Liens rapides Copyright ©2007 Zend Technologies, Inc.
# 48
Zend Platform pour les développeurs
Module Performance, Testing • L'onglet Testing vous donne accès à des tests de benchmarking: Tester des
téléchargements Tester une URL Tester un site
Copyright ©2007 Zend Technologies, Inc.
# 49
Zend Platform pour les développeurs
Module Session Clustering • Le problème Le protocole HTTP n'a pas d'état Les sessions sont le standard de facto pour stocker des données
par utilisateur pour une durée limitée Les données des sessions sont typiquement stockées dans des fichiers ou une base de données PHP vous permet d'écrire facilement des « handler » pour stocker des données de sessions dans tout support accessible par PHP Usage typique des sessions: un panier d'achats
Comment synchroniser les sessions ?
Copyright ©2007 Zend Technologies, Inc.
# 50
Zend Platform pour les développeurs
Module Session Clustering • La solution: Zend Session Clustering Les sessions résident sur le serveur où elles étaient créées Chaque session peut être lue par tout autre serveur du cluster Un système de vérouillage et d'intégrité de données plus performant Différentes façons de stocker les données: en fichier ou en mémoire
Copyright ©2007 Zend Technologies, Inc.
# 51
Zend Platform pour les développeurs
Module Session Clustering, Statistics • L'onglet Cluster Statistics du module Session Clustering
vous donne des informations sur les sessions sur le cluster
Copyright ©2007 Zend Technologies, Inc.
# 52
Zend Platform pour les développeurs
Module Java Bridge
• Intégrez vos librairies et classes Java avec PHP sans • •
heurts Augmentez le retour sur investissement de vos applications Java existantes tout en bénéficiant de PHP pour vos applications Web Délivrez une solution prenant le meilleur de deux mondes
Copyright ©2007 Zend Technologies, Inc.
# 53
Zend Platform pour les développeurs
Module Java Bridge: exemple • Exemple de communication avec une application Java
Copyright ©2007 Zend Technologies, Inc.
# 54
Zend Platform pour les développeurs
Module PHP Intelligence • PHP Intelligence est basé sur des incidents d'exécution
PHP se produisant sur le serveur Web, détectés par Zend Platform
Exécution lente de scripts (absolu / relatif) Erreurs PHP Erreurs de fonctions (ex: division par zéro) Fonction lente Exécution de requêtes SQL lentes Charge moyenne sur le(s) serveur(s) Utilisation mémoire excessive (absolu / relatif) Erreur de base de données Inconsistences de rendus – un client ne voit pas la même chose qu'un autre pour la même demande Evènements personnalisés Copyright ©2007 Zend Technologies, Inc.
# 55
Zend Platform pour les développeurs
Module PHP Intelligence, System Health • Une vue immédiate sur la « santé » de vos serveurs
Copyright ©2007 Zend Technologies, Inc.
# 56
Zend Platform pour les développeurs
Module PHP Intelligence, Event list • Une vue de la liste des évènements
Copyright ©2007 Zend Technologies, Inc.
# 57
Zend Platform pour les développeurs
Module PHP Intelligence, Event details
Informatons sur le script PHP générant l'évènement
Intégration avec Zend Studio
Afficher le code source du script
Données contextuelles à l'évènement Copyright ©2007 Zend Technologies, Inc.
# 58
Zend Platform pour les développeurs
PHP Intelligence, Intégration Zend Studio Tester l'URL: ouvre le navigateur Internet avec toutes les données contextuelles de l'évènement
Ouvre une session de débogage dans Zend Studio avec toutes les données contextuelles de l'évènement chargées
Ouvre le code source du script dans Zend Studio
Lance une session de profilage dans Zend Studio comprenant toutes les données contextuelles de l'évènement
Copyright ©2007 Zend Technologies, Inc.
# 59
Zend Platform pour les développeurs
Module PHP Intelligence, Event triggers • Définir les évènements capturés
Copyright ©2007 Zend Technologies, Inc.
# 60
Zend Platform pour les développeurs
Module PHP Intelligence, Graphs • Statistiques d'évènements par serveur
Copyright ©2007 Zend Technologies, Inc.
# 61
Zend Platform pour les développeurs
API Zend Platform
• Zend Platform possède une API permettant : D'utiliser les fonctionnalités de cache dans son application
(cache partiel) D'activer ou désactiver l'accélérateur De gérer le monitoring et envoyer des événements personnalisés D'envoyer des fichiers binaires en utilisant le Zend Download Server
• Une documentation complète est fournie dans le guide de l'utilisateur de la Zend Platform, ainsi qu'un tutorial pour l'utilisation du caching partiel.
Copyright ©2007 Zend Technologies, Inc.
# 62
Zend Platform pour les développeurs
API Zend Platform • Exemple de mise en
cache partiel d'une d'une fonction (getProductList est mis en cache, mais pas le header et le footer de la page).
Copyright ©2007 Zend Technologies, Inc.
# 63
Zend Platform pour les développeurs
Exercices
• Créer un utilisateur portant votre pseudonyme, se
logguer avec cet utilisateur et parcourir les écrans des slides précédents. • Télécharger le guide de l'utilisateur de la zend platform et l'ouvrir au chapitre consacré à l'API. • Créer un fichier "Cache.php" et implémenter une Zend Platform pour les développeurs classe "Cache" avec des méthodes "get", "set" et "clean" qui respectivement rappatrient, émettent une valeur dans le cache et vide le cache. • Utiliser cette classe dans un fichier test en mettant en oeuvre un jeu de test qui vérifie si ces trois méthodes fonctionnent. pour ces deux derniers points, vous pouvez utiliser les fonctions qui vous semblent les plus appropriées Copyright ©2007 Zend Technologies, Inc.
# 64
Standards de codage
Copyright Š 2007, Zend Technologies Inc.
Standards de codage • • • •
Pratiques et procédures courantes Conventions de nommage et de formattage Fonctionnalités recommandées Bonnes pratiques
Nous nous baserons sur les standards du framework Zend pour cette formation. Ces standards ont l'avantage d'être très complets et cohérents. Copyright ©2007 Zend Technologies, Inc.
# 66
Conventions : généralités
Copyright © 2007, Zend Technologies Inc.
Conventions : généralités
Pratiques des entreprises • PHP est une plateforme souple et simple à utiliser.
Pour faire un travail professionnel et productif, il est NECESSAIRE d'avoir des conventions solides, complètes et fiables. • La plupart des problèmes de pérénité et de productivité sont liés aux non respect des conventions et des architectures définies, ou tout simplement parce que ces considérations n'ont pas assez été abordées.
Copyright ©2007 Zend Technologies, Inc.
# 68
Conventions : généralités
Pratiques des entreprises • Certaines entreprises ont leurs propres
conventions, d'autres utilisent les conventions officielles (PEAR, Zend Framework). La deuxième solution s'avère plus efficace.
Copyright ©2007 Zend Technologies, Inc.
# 69
Conventions : généralités
Scope des conventions • Les conventions de codage doivent couvrir
La syntaxe de codage (tabulations, espaces, nommage, sauts de ligne, etc.) L'organisation des fichiers (nommage, hiérarchie, organisation, dossiers et fichiers obligatoires, etc.) L'architecture sur laquelle repose tout développement (mvc, méthodes de construction d'une librairie, interfaces à implémenter, etc.)
Copyright ©2007 Zend Technologies, Inc.
# 70
Conventions : généralités
Scope des conventions • Les conventions de codage doivent couvrir (suite)
L'utilisation des outils, notamment le gestionnaire de versions (messages des commits, nommage des tags et des branches, etc.) et le bugtracker La stratégie de qualité (écriture et passage des tests) La méthode de développement (méthode agile, XP, ...)
Copyright ©2007 Zend Technologies, Inc.
# 71
Formatage des fichiers
Copyright Š 2007, Zend Technologies Inc.
Formattage des fichiers
Général
• Pour les fichiers contenant uniquement du code PHP, le tag de fermeture ("?>") n'est jamais permis.
Il n'est pas requis pas PHP. Ne pas l'inclure permet de prévenir les problèmes liés à l'injection accidentelle d'espaces blancs dans la sortie.
• IMPORTANT: L'inclusion de données binaires arbitraires comme il est permis par __HALT_COMPILER() est très déconseillé. L'utilisation de cette possibilité devrait uniquement être permise pour des scripts spéciaux d'installation. Copyright ©2007 Zend Technologies, Inc.
# 73
Formattage des fichiers
Indentation, longueur de ligne • Utiliser une indentation de 4 espaces, sans
tabulations. • La longueur souhaitée d'une ligne est de 80 caractères.
i.e les développeurs devraient avoir pour but de ne pas dépasser les 80 caractères pour des raisons pratiques. Cependant, des lignes plus longues sont acceptables. La longueur maximum de toute ligne de code PHP est de 120 caractères.
Copyright ©2007 Zend Technologies, Inc.
# 74
Formattage des fichiers
Terminaison de lignes • La terminaison de ligne est la terminaison
standard pour les fichier textes UNIX. Les lignes doit finir seulement avec un "linefeed" (LF). Les linefeeds sont représentés
comme 10 en ordinal, ou 0x0A en hexadecimal.
• Ne pas utiliser de retour chariot (CR) comme les font les Macintosh (0x0D) • Ne pas utiliser de combinaison retour chariot/linefeed (CRLF) comme le font les ordinateurs sous Windows (0x0D, 0x0A). Copyright ©2007 Zend Technologies, Inc.
# 75
Conventions de nommage
Copyright Š 2007, Zend Technologies Inc.
Conventions de nommage
Classes
• Le Framework Zend emploie une convention de
nommage des classes où les noms des classes mènent directement dans le(s) répertoire(s) dans lesquels elle sont stockées. • Le répertoire racine du Framework Zend est le répertoire "Zend", dans lequel toutes les classes sont stockées de façon hiérarchique.
Copyright ©2007 Zend Technologies, Inc.
# 77
Conventions de nommage
Classes
• Les noms de classes
Ne peuvent contenir que des caractères alphanumérique. Les tirets bas ("_") ne sont autorisés que pour être utilisés comme séparateur de chemin -- le nom "Zend/Db/Table.php" doit mener à la classe appelée "Zend_Db_Table". Les nombres sont autorisés, mais déconseillés.
Copyright ©2007 Zend Technologies, Inc.
# 78
Conventions de nommage
Classes
• Les noms de classes
Si un nom de classe comprend plus d'un mot, la première lettre de chaque nouveau mot doit être mis en majuscule. La mise en majuscule successive de lettre n'est pas autorisée, i.e une class "Zend_PDF" est interdit alors que "Zend_Pdf" est autorisé.
Copyright ©2007 Zend Technologies, Inc.
# 79
Conventions de nommage
Classes
• Remarque Zend Framework
Le code qui opère avec le Framework mais qui n'en fait par partie, i.e le code écrit par un utilisateur et pas Zend ou une des entreprises partenaires, ne doivent jamais commencer par "Zend_".
Copyright ©2007 Zend Technologies, Inc.
# 80
Conventions de nommage
Classes
• Voici 3 exemples de noms de classes autorisés : Zend_Db Zend_View Zend_View_Helper
Copyright ©2007 Zend Technologies, Inc.
# 81
Conventions de nommage
Interfaces
• Les interfaces doivent suivre les mêmes
conventions que les autres classes (cf slide précédent), • cependant elles doivent finir par le mot "Interface" comme le montre les exemples du slide suivant.
Copyright ©2007 Zend Technologies, Inc.
# 82
Conventions de nommage
Interfaces
â&#x20AC;˘ Nommage des interfaces Zend_Log_Adapter_Interface Zend_Controller_Dispatcher_Interface
Copyright Š2007 Zend Technologies, Inc.
# 83
Conventions de nommage
Noms de fichier
• Pour tous les autres fichiers, seuls des caractères
alphanumérique, tirets bas et tiret demi-cadratin ("-") sont autorisés. • Les espaces et les caractères spéciaux sont interdits. • Tout fichier contenant du code PHP doit se terminer par l'extension ".php" • Les exemples suivants montrent des noms de fichiers acceptables pour contenir les noms de classes issus des exemples précédents.
Copyright ©2007 Zend Technologies, Inc.
# 84
Conventions de nommage
Noms de fichier
• Exemples de noms de fichiers valides Zend/Db.php Zend/Controller/Front.php Zend/View/Helper/FormRadio.php
Copyright ©2007 Zend Technologies, Inc.
# 85
Conventions de nommage
fonctions et méthodes • Les noms de fonctions
Ne peuvent contenir que des caractères alphanumériques. Les tirets_bas ne sont pas permis. Les nombres sont autorisés mais déconseillés. Ils doivent toujours commencer avec une lettre en minuscule. Quand un nom de fonction est composé de plus d'un seul mot, la première lettre de chaque mot doit être en majuscule (méthode "studlyCaps" ou "camelCaps"). La clarté est conseillée. Le nom devrait être aussi explicite que possible, c'est un gage de compréhension du code.
Copyright ©2007 Zend Technologies, Inc.
# 86
Conventions de nommage
fonctions et méthodes • Noms acceptables pour des fonctions filterInput() getElementById() widgetFactory()
Copyright ©2007 Zend Technologies, Inc.
# 87
Conventions de nommage
Variables
• Les noms de variables
Ne peuvent contenir que des caractères alphanumériques. Les tirets bas ne sont pas permis. Les nombres sont autorisés mais déconseillés.
• Pour les variables membres de classe
Qui sont déclarées comme "private" ou "protected", le premier caractère du nom doit être un seul tiret bas. C'est le seul usage acceptable d'un tiret bas dans un nom de variable. Les variables membres "public" ne devraient jamais commencer par un tiret bas. Copyright ©2007 Zend Technologies, Inc.
# 88
Conventions de nommage
Constantes
• Les constantes
Peuvent contenir des caractères alphanumérique et des tirets bas, les nombres sont autorisés. Elles doivent toujours être en majuscule. Elles doivent toujours être définies comme des membres d'une classe, en utilisant la construction "const".
• Définir des constantes globales avec "define" est permis mais déconseillé.
Copyright ©2007 Zend Technologies, Inc.
# 89
Style de codage
Copyright Š 2007, Zend Technologies Inc.
Style de codage
Démarcation du code PHP • Les démarcations PHP doivent toujours être
délimitées par la forme complète : (<?php ...). • Les balises courtes d'ouverture ne sont pas autorisées.
Copyright ©2007 Zend Technologies, Inc.
# 91
Style de codage
Chaînes de caractères • Lorsqu'une chaîne est littérale (i.e elle ne contient pas de substitution de variables), le guillemet simple doit être utilisé pour démarquer la chaîne.
$a = 'Example String';
• Lorsque qu'une chaîne litérale contient des
apostrophes, il est permis de les démarquer en utilisant les guillemets doubles.
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
Copyright ©2007 Zend Technologies, Inc.
# 92
Style de codage
Substitution de variables • Elle est permise sous deux formes : $greeting = "Bonjour $name, bienvenue!"; $greeting = "Bonjour {$name}, bienvenue!"; // Cette forme n'est pas permise (pour des raisons d'uniformité) $greeting = "Bonjour ${name}, bienvenue!";
Copyright ©2007 Zend Technologies, Inc.
# 93
Style de codage
Concaténation de chaînes • Les chaînes peuvent êtres concaténées en
utilisant l'opérateur ".". Un espace doit toujours être ajouté avant, et après cet opérateur, cela permet d'améliorer la lisibilité.
$company = 'Zend' . 'Technologies';
• Lors de la concaténation de chaînes avec l'opérateur "."
Il est permis de couper le segment en plusieurs lignes pour améliorer la lisibilité. Dans ces cas, chaque nouvelle ligne doit être remplie avec des espaces, de façon à aligner le "." sous l'opérateur "=". Copyright ©2007 Zend Technologies, Inc.
# 94
Style de codage
Concaténation de chaînes • Exemple de concaténation sur plusieurs lignes $sql = "SELECT `id`, `name` FROM `people` WHERE `name` = 'Susan' ORDER BY `name` ASC ";
Copyright ©2007 Zend Technologies, Inc.
# 95
Style de codage
Verifier les chaînes • Dans chaque fichier de l'application fournie
Vérifier le format des chaînes de caractères. Mettre les concaténations à la norme. Faites en sorte que les lignes ne dépassent pas 80 caractères.
Ce sont souvent les chaînes qui dépassent en longueur les 80 caractères max. conseillés d'une ligne ! Copyright ©2007 Zend Technologies, Inc.
# 96
Style de codage
Tableaux
• Tableaux indexés numériquement
L'utilisation d'indices négatifs n'est pas permise. Un tableau indexé doit commencer avec n'importe quel nombre positifs, cependant cette méthode est déconseillée. Il est conseillé de commencer l'indexation à 0. Lors de la déclaration de tableaux indexés avec la construction array, un espace doit être ajouté après chaque virgule délimitante, pour améliorer la lisibilité. Ex : $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
Copyright ©2007 Zend Technologies, Inc.
# 97
Style de codage
Tableaux
• Tableaux indexés numériquement
Il est aussi permis de déclarer des tableaux indexés sur plusieurs lignes en utilisant la construction array. Dans ce cas, chaque nouvelle ligne doit être remplie par des espaces jusqu'à ce que cette ligne s'aligne (cf. slide suivant).
• Lors de la déclaration de tableaux associatifs avec la construction array
Séparer la définition sur plusieurs lignes. Dans ce cas, chaque ligne successive doit être remplie par des espaces pour que les clés et les valeurs soient alignées.
Copyright ©2007 Zend Technologies, Inc.
# 98
Style de codage
Tableaux
• Exemple de déclaration de tableaux $sampleArray = array(1, 2, 3, 'Zend', 'Studio', $a, $b, $c, 56.44, $d, 500); $sampleArray = array('firstKey' => 'firstValue', 'secondKey' => 'secondValue');
Copyright ©2007 Zend Technologies, Inc.
# 99
Style de codage
Check des tableaux • Dans l'application fournie
Vérifier si les tableaux sont tous déclarés correctement. Mettre les déclarations et les lignes qui utilisent les tableaux à la norme.
Ne pas oublier de déclarer votre tableau avant de l'utiliser !
Copyright ©2007 Zend Technologies, Inc.
# 100
Style de codage
Déclaration de classes • Règles de déclaration
L'accolade est toujours écrite dans la ligne sous le nom de la classe (forme "one true brace"). Toutes les classes doivent avoir un bloc de documentation conforme à PHPDocumentor. Tout code d'une classe doit être indenté avec 4 espaces. Une seule classe par fichier PHP. Le placement de code additionnel dans un fichier de classe est permis, mais déconseillé. Dans ces fichier, deux lignes vides doivent séparer la classe du code PHP additionel.
Copyright ©2007 Zend Technologies, Inc.
# 101
Style de codage
Déclaration de classes • Exemple de déclaration de classe /** * Bloc de documentation */ class SampleClass { // contenu de la classe // qui doit être indenté avec 4 espaces }
Copyright ©2007 Zend Technologies, Inc.
# 102
Style de codage
Compléter les classes • Compléter les classes existantes
Par une documentation phpdoc utile. Essayer de mettre une exemple d'utilisation entre des balises <code></code>.
Mettre aussi quelques tags phpdoc utiles : licence, auteur, version, paquetage, sous-paquetage, ... Copyright ©2007 Zend Technologies, Inc.
# 103
Style de codage
Variables membres d'une classe • Les variables membres (propriétés)
Doivent être nommées en respectant les conventions de nommage. Doivent être listée en haut de la classe, avant toute déclaration de fonction.
• La construction var (PHP4) n'est pas permise en PHP5.
Toujours mentionner la visibilité : private, protected, ou public. L'accès direct aux variables membres publiques est permis mais déconseillé. Il est préférable d'utiliser des accesseur (set/get). Copyright ©2007 Zend Technologies, Inc.
# 104
Style de codage
Fonctions, méthodes • Les fonctions
Doivent être nommées en respectant les conventions de nommage.
• Mentionner la visibilité des fonctions internes aux
classes (private, protected, ou public) est obligatoire. • Tout comme les classes, l'accolade ouvrante est toujours écrite sous le nom de la fonction (form "one true brace").
Copyright ©2007 Zend Technologies, Inc.
# 105
Style de codage
Fonctions, méthodes • Il n'y a pas d'espace entre le nom de la fonction et les parenthèses des arguments. • Il n'y a pas d'espace entre la parenthèse fermante et l'accolade.
Copyright ©2007 Zend Technologies, Inc.
# 106
Style de codage
Fonctions, méthodes • Les fonctions globales sont fortement
déconseillées. • Le passage par référence est permis uniquement dans la déclaration de la fonction. • L'appel par référence est interdit. • La valeur de retour ne doit pas être entourée de parenthèses.
Ceci peut gêner à la lecture et peut aussi casser le code si une méthode est modifiée plus tard pour retourner par référence.
Copyright ©2007 Zend Technologies, Inc.
# 107
Style de codage
Fonctions, méthodes • Déclarer fonctions et méthodes /* * Bloc de documentation */ function sampleMethod($a) { // contenu de la fonction // qui doit être indenté avec 4 espaces } function sampleMethod(&$a) {}
Copyright ©2007 Zend Technologies, Inc.
# 108
Style de codage
Fonctions, méthodes • Retour de fonction function foo() { // INCORRECT return($this->bar);
}
// CORRECT return $this->bar;
Copyright ©2007 Zend Technologies, Inc.
# 109
Style de codage
Vérification des fonctions • Dans les fonctions de l'application fournie
Vérifier si leur déclaration est à la norme. Vérifier les retours, les corriger si nécessaire.
Les fonctions et les méthodes ont exactement les mêmes conventions de codage. Copyright ©2007 Zend Technologies, Inc.
# 110
Style de codage
Usage de fonctions, méthodes • Les arguments d'une fonction sont séparés par un espace après la virgule de délimitation. • L'appel par référence est interdit.
Se référer à la section sur la déclaration de fonctions pour la méthode correcte de passer des argument par référence.
• Pour les fonctions dont les arguments peuvent être des tableaux
L'appel à la fonction doit inclure la construction "array" et peut être divisé en plusieurs ligne pour améliorer la lecture. Dans ces cas, les standards d'écriture de tableaux s'appliquent aussi. Copyright ©2007 Zend Technologies, Inc.
# 111
Style de codage
Déclarer fonctions et méthodes • Exemple d'appels de fonctions threeArguments(1, 2, 3); threeArguments(array(1, 2, 3), 2, 3); threeArguments(array(1, 2, 3, 'Zend', 'Studio', $a, $b, $c, 56.44, $d, 500), 2, 3);
Copyright ©2007 Zend Technologies, Inc.
# 112
Style de codage
Structure de contrôle : if / else • Les structure de contrôles basée sur les construction if et elseif
Doivent avoir un seul espace avant la parenthèse ouvrante de la condition et un seul espace après la parenthèse fermante.
• Pour la condition entre les parenthèses
Les opérateurs doivent être séparés par des espaces pour une meilleure lisibilité. Les parenthèses internes sont conseillées pour améliorer le regroupement logique de longues conditions.
Copyright ©2007 Zend Technologies, Inc.
# 113
Style de codage
Structure de contrôle : if / else • L'accolade ouvrante est écrite sur la même ligne que la condition. • L'accolade fermant est toujours écrite sur sa propre ligne. • Tout contenu présent à l'intérieur des accolades doit être indenté par 4 espaces. • Pour les instruction "if" qui incluent "elseif" ou "else", le formattage doit être comme le montre ces exemples suivants...
Copyright ©2007 Zend Technologies, Inc.
# 114
Style de codage
Structure de contrôle : if / else • Exemple avec if, else, elseif if ($a != 2) { $a = 2; } if ($a $a } else $a }
!= 2) { = 2; { = 7;
Copyright ©2007 Zend Technologies, Inc.
# 115
Style de codage
Structure de contrôle : if / else • Exemple avec if, else, elseif if ($a != 2) { $a = 2; } elseif ($a == 3) { $a = 4; } else { $a = 7; }
Copyright ©2007 Zend Technologies, Inc.
# 116
Style de codage
Structure de contrôle : if / else • PHP permet que ces instruction soient écrites sans accolades dans certaines circonstances.
La convention de codage ne fait pas de différentiation et toute les instructions "if", "elseif" et "else" doivent utiliser des accolades.
• L'utilisation de la construction "elseif" est permise mais fortement déconseillée au profit de la combinaison "else if".
Copyright ©2007 Zend Technologies, Inc.
# 117
Style de codage
Structure de contrôle : Switch • Les instructions de contrôle avec "switch"
Ne doivent avoir qu'un seul espace avant ma parenthèse ouvrante de l'instruction conditionnelle, Et aussi un seule espace après la parenthèse fermante.
• Tout le contenu à l'intérieur de l'instruction
"switch" doit être indenté avec 4 espaces. • Le contenu sous chaque "case" doit être indenté avec encore 4 espaces supplémentaires.
Copyright ©2007 Zend Technologies, Inc.
# 118
Style de codage
Structure de contrôle : Switch • Exemple avec switch switch ($numPeople) { case 1: break; case 2: break;
}
default: break;
Copyright ©2007 Zend Technologies, Inc.
# 119
Style de codage
Structure de contrôle : Switch • La construction default ne doit jamais être
oubliée dans une instruction switch. • Il est parfois utile d'écrire un case sans break
Pour distinguer ces cases et les erreurs, il est utile de mettre le break en commentaire : "// break intentionally omitted".
Copyright ©2007 Zend Technologies, Inc.
# 120
Style de codage
If et Switch • Dans l'application fournie
Vérifier la structure des if. Vérifier la structure des switch. Ajouter les accolades si elles ne sont pas mentionnées.
La plupart des conventions pour if et switch se retrouveront dans d'autres structures (for, foreach, etc.) Copyright ©2007 Zend Technologies, Inc.
# 121
La PHPDOC
Copyright Š 2007, Zend Technologies Inc.
La PHPDOC
Introduction • La phpdoc est un standard d'écriture pour la
documentation d'un code source en PHP. • On reconnait la phpdoc à sa structure. • La phpdoc permet de documenter en particulier
Les fichiers php Le classes Les fonctions et les méthodes de classe Les constantes et les propriétés de classe Les include / require
Copyright ©2007 Zend Technologies, Inc.
# 123
La PHPDOC
Importance de la documentation • La documentation permet de rendre compréhensible un code source. • La phpdoc est un standard !
Qui permet de travailler à plusieurs. Qui permet d'échanger le code source. Qui rend possible une génération universelle de documentation en ligne ou papier.
Copyright ©2007 Zend Technologies, Inc.
# 124
La PHPDOC
Structure de la PHPDOC • La PHPDOC est reconnaissable à sa structure /** * Je suis un commentaire PHPDOC ! */
Copyright ©2007 Zend Technologies, Inc.
# 125
La PHPDOC
Les balises de la PHPDOC • La PHPDOC possède des balises d'identification /** * Je suis le titre de mon commentaire. * * Je suis le contenu de mon commentaire. * * @author Steven Van Poeck <steven@zend.com> * @copyright Zend 2006 * @package taskmanager * @version 0.1 */
Copyright ©2007 Zend Technologies, Inc.
# 126
La PHPDOC
Les tags utiles (1) • @access
Désigne la visibilité d'une propriété ou d'une méthode (public, protected, private static).
• @author
Auteur de l'élément (page, classe, méthode, fonction, propriété)
• @copyright
Copyright du code source ou de la classe.
Copyright ©2007 Zend Technologies, Inc.
# 127
La PHPDOC
Les tags utiles (2) • @deprecated
La présence de ce tag informe le développeur que cette fonctionnalité est dépréciée et sera retirée à terme.
• @example
Lien vers un exemple. Il est aussi possible de mettre en place des exemples "inline".
• @ignore
Demande au parseur phpdoc d'ignorer un élément (pour un doublon par exemple)
Copyright ©2007 Zend Technologies, Inc.
# 128
La PHPDOC
Les tags utiles (3) • @internal
Introduit une documentation "privée" qui peut être ou ne pas être générée à la demande.
• @link
Introduit un lien en rapport avec l'élément (exemple ou documentation supplémentaire). Cette balise n'accepte qu'un lien http.
• @see
Fait référence à une ressource (classe, fonction, etc. ou lien).
Copyright ©2007 Zend Technologies, Inc.
# 129
La PHPDOC
Les tags utiles (4) • @since
Informe depuis quelle version de l'application une fonction existe.
• @tutorial
Lien vers la documentation étendue de l'élément. Pour d'autres liens, utiliser plutôt @link ou @see.
• @version
Version de l'élément.
Copyright ©2007 Zend Technologies, Inc.
# 130
La PHPDOC
Complétion dans l'éditeur • Les tags @var et @return permettent d'expliciter
le type de donnée qui sera contenu dans une propriété ou renvoyé par une fonction ou une méthode. • Dans l'exemple du slide suivant, l'éditeur sait que la propriété $statement contient une valeur de type PDOStatement.
Copyright ©2007 Zend Technologies, Inc.
# 131
La PHPDOC
Complétion dans Zend Studio
Copyright ©2007 Zend Technologies, Inc.
# 132
La PHPDOC
Documentation d'un fichier • Dans un fichier de l’application fournie
Ajoutez un commentaire PHPDOC en haut du fichier Ajoutez un titre et une description Repérez les tags utiles à la description du fichier et ajoutez-les
• A l'aide de l'assistant PHPDocumentor de Zend Studio, générez une documentation sur ce fichier
IMPORTANT : Documentez votre code au fur et à mesure. A la fin de la formation, nous générerons la documentation de l'ensemble de vos exercices. Copyright ©2007 Zend Technologies, Inc.
# 133
Migration vers PHP 5
Copyright Š 2007, Zend Technologies Inc.
Migration vers PHP 5 - Introduction
Pourquoi migrer ?
• Plus de stabilité • Plus de fonctionnalités • Plus d'évolutivité • Bénéficier des nouveautés, entre autre :
Un support POO complet Un support XML simple, fiable et rapide Une interopérabilité efficace avec les services web Des extensions puissantes : PDO, SOAP, ...
Copyright ©2007 Zend Technologies, Inc.
# 135
Migration vers PHP 5 • • • • •
Ce qui change entre PHP 4 et PHP 5 Préparer un plan de migration L'étape de l'adaptation L'étape de l'optimisation Outils pour la migration
Une migration vers PHP 5 doit pouvoir se faire avec méthode. Ce support est important pour tous ceux qui souhaitent gagner du temps et de l'énergie. Copyright ©2007 Zend Technologies, Inc.
# 136
Ce qui change entre PHP 4 et PHP 5
Copyright Š 2007, Zend Technologies Inc.
Ce qui change entre PHP 4 et PHP 5
Différences syntaxiques • Visibilité des propriétés et méthodes de classe • Introduction des interfaces • Gestion des exceptions • Des mots clés supplémentaires
exception, final, php_user_filter, interface, implements, public, private, protected, abstract, clone, try, catch, throw
• Des mots clés en moins
cfunction, old_function
Copyright ©2007 Zend Technologies, Inc.
# 138
Ce qui change entre PHP 4 et PHP 5
Différences importantes (POO) • Passage par référence des objets
par défaut en PHP 5 (vs par copie en PHP 4) passage par copie avec 'clone'
• Un objet sans propriété n'est plus vide • Une classe doit être déclarée avant son utilisation • get_class(), get_parent_class(), get_class_methods()
respectent la casse de la classe retournée
• __CLASS__, __METHOD__, et __FUNCTION__
doivent être écrits en majuscules uniquement Copyright ©2007 Zend Technologies, Inc.
# 139
Ce qui change entre PHP 4 et PHP 5
Différences importantes • strrpos et strripos matchent la chaine needle
entière • array_merge ne fonctionne qu'avec des tableaux • ip2long renvoit FALSE plutôt que -1 si une IP invalide est passée en argument • En cas de double inclusion d'un fichier contenant une déclaration (fonction, classe), une erreur fatale est générée
Copyright ©2007 Zend Technologies, Inc.
# 140
Ce qui change entre PHP 4 et PHP 5
Apports significatifs • Extensions objet
Plusieurs extensions (mysqli, PDO, DOM, ...) sont orientées objet.
• Standard PHP Library
L'utilisation de la SPL avec PHP 5 augmente les performances et les possibilités des objets
• Le support XML
Est simplifié, stabilisé et complété Mise à disposition de SimpleXML Amélioration du support DOM
Copyright ©2007 Zend Technologies, Inc.
# 141
Ce qui change entre PHP 4 et PHP 5
Différences méthodologiques • Ce qui est maintenu
Simplicité et souplesse Performances
• Ce qui évolue
La notion de POO, les possibilités de modélisation La réutilisabilité L'amélioration des supports XML et bases de données
Copyright ©2007 Zend Technologies, Inc.
# 142
Préparer un plan de migration
Copyright © 2007, Zend Technologies Inc.
Préparer un plan de migration
Quelle est votre situation ? • Existant en PHP 4 à migrer • Migration en cours mais difficile • Existant en un autre langage à migrer
Java ASP Autre
• Existant en PHP 5 à améliorer • Je travaille avec des outils
Des tests unitaires Un profiler / debogueur La phpdoc Copyright ©2007 Zend Technologies, Inc.
# 144
Préparer un plan de migration
Préparation du plan de migration • Adapter le plan à votre situation
Les caractéristiques de l'existant (langage, densité) Les méthodes de travail (tests, qualité) Les outils utilisés (framework, tests unitaires) Les ressources disponibles (habitudes, connaissances)
• Faire un plan par étapes
Sélectionner les étapes à mettre en place Définir un processus pour chaque étape
Copyright ©2007 Zend Technologies, Inc.
# 145
Préparer un plan de migration
Etapes de migration • Adaptation
Vérification des fonctions qui ont changées Passage en PHP 5, compatible Zend Engine I Vérification des classes et de leurs utilisations Adaptation des classes et de la syntaxe Passage en PHP 5, Zend Engine II
• Optimisation
Passage en PHP 5, Zend Engine II, E_STRICT Mise à jour de la syntaxe Mise à jour des extensions et fonctionnalités Mise à jour de l'architecture globale
Copyright ©2007 Zend Technologies, Inc.
# 146
Préparer un plan de migration
En fonction de votre situation... • Si vous migrez depuis PHP 4
Alors toutes ces étapes doivent être prises en compte
• Si vous migrez depuis un autre langage
Alors passez directement en PHP 5 E_STRICT et développez avec une bonne architecture (sur le Zend Framework par exemple)
Copyright ©2007 Zend Technologies, Inc.
# 147
Préparer un plan de migration
En fonction de votre situation... • Si vous partez d'un existant PHP 5
Faites toutes les étapes d'optimisation Il est recommandé d'optimiser avec les tests unitaires
• Si vous recommencez une migration
Commencez à partir de 'vérification des classes et de leurs utilisations'
Copyright ©2007 Zend Technologies, Inc.
# 148
L'étape de l'adaptation
Copyright © 2007, Zend Technologies Inc.
L'étape de l'adaptation
Plan général d'adaptation • Vérifier les fonctions
Quelques rares fonctions ne sont pas présentes ou ont été modifiées dans PHP 5
• Passage en PHP 5, compatible Zend Engine I
Cela permet d'être en PHP 5 tout en restant compatible avec le moteur de PHP 4
• Vérification et adaptation des classes
C'est l'étape la plus minutieuse et critique : passage par référence par défaut en PHP 5
• PHP 5, Zend Engine II
Mise en place du moteur de PHP 5 juste après l'étape précédente et déboguage complet Copyright ©2007 Zend Technologies, Inc.
# 150
L'étape de l'adaptation
Check : fonctions, mots clés • Vérification des fonctions suivantes
strrpos, strripos array_merge get_class, get_parent_class, get_class_methods ip2long
• Supprimer les mots clés suivants
cfunction, old_function
• Les mots clés suivants ne doivent pas être utilisés
exception, final, php_user_filter, interface, implements, public, private, protected, abstract, clone, try, catch, throw
Copyright ©2007 Zend Technologies, Inc.
# 151
L'étape de l'adaptation
Vérification
• Rechercher ces mots clés et...
Vérifier leur fonctionnement s'il s'agit de fonctions qui ont évoluées Les supprimer (et les remplacer par un équivalent) s'ils ont été retirés Les modifier s'ils entrent en conflit avec un nouveau mot clé
Copyright ©2007 Zend Technologies, Inc.
# 152
L'étape de l'adaptation
PHP 5, compatible ZE I • Passer en PHP 5 compatible Zend Engine I
Dans php.ini, mettre la directive 'zend.ze1_compatibility_mode' à On Cela a pour effet d'utiliser PHP 5 avec le moteur de PHP 4
• S'il y a des problèmes
Les corriger à l'aide d'un débogueur et les erreurs affichées
• Si tout fonctionne
Alors les différences minimes entre PHP 4 et PHP 5 sont réglées, passer à l'étape suivante
Copyright ©2007 Zend Technologies, Inc.
# 153
L'étape de l'adaptation
Vérification des classes • Objectif
Vérifier toutes les instanciations de classes et les passages des objets aux fonctions et aux variables
• Deux solutions pour rendre compatible PHP 5
Mettre le mot clé 'clone' devant tout passage aux fonctions et aux variables (non recommandé) Remanier le code pour tenir compte du passage par référence (recommandé, cf. slide suivant)
Copyright ©2007 Zend Technologies, Inc.
# 154
L'étape de l'adaptation
Adaptation des classes • Passage par référence = même objet <?php function modify($obj) { $obj->name = 'Guillaume'; } // L'objet $a est modifié PHP 5 ! $a = new MyObj(); modify($a); // L'objet $a est modifié PHP 5 ! $b = $a; $b->name = 'William';
Copyright ©2007 Zend Technologies, Inc.
# 155
L'étape de l'adaptation
Méthode d'adaptation • Relire son algorithme
est nécessaire pour détecter les problèmes éventuels
• Utiliser 'clone' si c'est nécessaire • Retirer les & du passage par référence PHP 4 • Référence, copie : pour ou contre ?
Le passage par référence économise des ressources : on ne duplique pas l'objet en mémoire En Java, C++, les passages sont faits aussi par référence par défaut
Copyright ©2007 Zend Technologies, Inc.
# 156
L'étape de l'adaptation
PHP 5, ZE II
• Une fois toutes les vérifications effectuées
Passer 'zend.ze1_compatibility_mode' à Off Tester minutieusement l'ensemble des fonctionnalités
• En cas de dysfonctionnement
Se référer à l'erreur générée (cas facile) Relire son algorithme en ayant en tête les évolutions précédentes
• A la fin de cette étape, votre application fonctionne mais n'est pas optimisée pour PHP 5
L'utilisation des tests unitaires réduira considérablement le temps passé à cette étape tout en assurant un maximum de stabilité à votre migration, pensez-y ! Copyright ©2007 Zend Technologies, Inc.
# 157
L'étape de l'optimisation
Copyright © 2007, Zend Technologies Inc.
L'étape de l'optimisation
Plan général d'optimisation • Passage en E_STRICT
E_STRICT concerne les spécificités de PHP 5
• Remaniement de la syntaxe
Effectuer toutes les modifications de manière à ne pas générer d'erreurs E_STRICT
• Les extensions natives
De nombreuses fonctionnalités sont devenues stables et efficaces en PHP 5, il est très recommandé d'effectuer ces petites migrations
• L'architecture
On passe du procédural à l'objet, cela permet d'adopter une architecture mixte intéressante Copyright ©2007 Zend Technologies, Inc.
# 159
L'étape de l'optimisation
Passage en E_STRICT • Le passage en E_STRICT permet
d'être assuré de l'utilisation de la syntaxe PHP 5 de remanier la syntaxe si nécessaire d'avoir des suggestions pour améliorer le code
• Ce mode produit des notices
Pas d'arrêt d'exécution en cas d'erreur
Copyright ©2007 Zend Technologies, Inc.
# 160
L'étape de l'optimisation
Adoption des extensions natives • Avantages
Rapidité et stabilité accrues Moins de code PHP pour plus de performances Des extensions objet faciles à manier
• Quelques extensions natives objet pour PHP 5
DOM, PDO et ses drivers, mysqli, SDO, SimpleXML, SQLite, SPL, XMLReader, XSL
Copyright ©2007 Zend Technologies, Inc.
# 161
L'étape de l'optimisation
Remaniement de l'architecture • Du procédural à l'objet
L'architecture globale évolue L'architecture des composants évolue
• Quelle différence ?
L'objet est plus modulaire et compatible UML, bien que plus verbeux La phpdoc est plus lisible et complète en objet Le travail en équipe est favorisé par la structuration objet
Copyright ©2007 Zend Technologies, Inc.
# 162
Outils pour la migration
Copyright Š 2007, Zend Technologies Inc.
Outils pour la migration
Utilité des outils • Migrer plus rapidement
En automatisant En ayant une meilleure visibilité
• Assurer stabilité et cohérence
En testant efficacement En maintenant les performances au top
• Migrer efficacement l'architecture
Grâce à la maîtrise de celle-ci à tout moment
Copyright ©2007 Zend Technologies, Inc.
# 164
Outils pour la migration
DiversitĂŠ des outils
Copyright Š2007 Zend Technologies, Inc.
# 165
Outils pour la migration
Les tests unitaires • Ils sont l'allié de tout refactoring • Ils assurent le bon fonctionnement du code • Ils permettent de trouver tout de suite où se trouve l'erreur • Principe
A chaque fonctionnalité élémentaire, un test est déclaré Ce test déroule un scénario qui utilise cette fonctionnalité Tout ce qui est effectué est contrôlé En cas d'erreur ou d'incohérence, le test échoue
Copyright ©2007 Zend Technologies, Inc.
# 166
Outils pour la migration
Méthode migration avec les TU • Test à postériori
1. développer la fonctionnalité 2. développer les tests par dessus
• Test à priori
1. construire le squelette applicatif 2. développer les tests comme si la fonctionnalité existait 3. développer la fonctionnalité jusqu'à ce que les tests passent
• Notion de couverture
A 0%, la couverture est nulle (pas de test) et à 100%, la couverture est maximale (test de tout le code) Copyright ©2007 Zend Technologies, Inc.
# 167
Outils pour la migration
Un profiler / débogueur • Le profiler
Donne des statistiques sur l'ensemble des instructions élémentaires effectuées par une requête PHP Détecte : les goulots d'étranglements, les doublons
• Le débogueur
Permet d'exécuter une requête pas à pas en maîtrisant l'ensemble de l'environnement Utilité : examiner le déroulement d'une requête qui présente des difficultés
Copyright ©2007 Zend Technologies, Inc.
# 168
La gestion des versions
Copyright Š 2007, Zend Technologies Inc.
La gestion des versions
Introduction
• Principe du versionnage • Outils existants • Opérations de base • Récupération après conflit ou erreur • Bonnes pratiques • Considérations d'architecture • Utilisation dans Zend Studio
Copyright ©2007 Zend Technologies, Inc.
# 170
Principe du versionnage
Copyright Š 2007, Zend Technologies Inc.
Principe du versionnage
Introduction
• Objectifs, utilité • Principe global • Le serveur • Le client
Copyright ©2007 Zend Technologies, Inc.
# 172
Principe du versionnage
Objectifs, utilité • Permettre le travail à plusieurs
Partage des sources Gestion des conflits d'écritures Mémorisation de 'qui à fait quoi'
• Gestion de versions
Figer une version que l'on peut extraire à tout moment Revenir sur une version de fichier de l'application Gérer plusieurs versions en parallèle
Copyright ©2007 Zend Technologies, Inc.
# 173
Principe du versionnage
Principe global
Copyright Š2007 Zend Technologies, Inc.
# 174
Principe du versionnage
Le serveur
• Une base de données (dépot de données) • Lié à un démon (http, ssh) • Gestion des utilisateurs, des groupes et des droits • Un outil de gestion et d'administration
Copyright ©2007 Zend Technologies, Inc.
# 175
Principe du versionnage
Le client
• Un logiciel 'client' (TortoiseSVN...) • La dernière copie de travail en cours • Des méta-fichiers (.svn, .cvs)
Copyright ©2007 Zend Technologies, Inc.
# 176
Outils existants
Copyright Š 2007, Zend Technologies Inc.
Outils existants
Introduction • CVS et Subversion • Fonctionnalités de Subversion
Copyright ©2007 Zend Technologies, Inc.
# 178
Outils existants
CVS et Subversion • CVS et Subversion : 2 outils phares pour la gestion des sources • Tous deux opensource • CVS
Existe depuis de nombreuses années Un outil qui a fait ses preuves
• Subversion
Le successeur de CVS Meilleure gestion des fichiers binaires et des répertoires
Copyright ©2007 Zend Technologies, Inc.
# 179
Outils existants
Fonctionnalités de Subversion • Versionnage, stockage dans une base berkeley • Gestion avancée des droits
Utilisateurs, groupes, droits sur répertoire, lecture/écriture
• Association avec un serveur HTTP ou SSH • Copies (tags), branches, merges • Différences, historique, logs • Adaptation à LDAP
Copyright ©2007 Zend Technologies, Inc.
# 180
Outils existants
Installation du client • Téléchargez TortoiseSVN • Installez-le • Vérifiez son bon fonctionnement en faisant un clic•
droit sur n'importe quel dossier à votre disposition. Faites une extraction (checkout) du projet spécifié par votre formateur.
Le premier client Subversion est l'exécutable 'svn' en ligne de commandes. Celui-ci est très pratique dans un environnement UNIX/Linux. Copyright ©2007 Zend Technologies, Inc.
# 181
Opérations de base
Copyright © 2007, Zend Technologies Inc.
Opérations de base
Introduction • Liste des opérations • Exemples d'utilisation en ligne de commandes
Copyright ©2007 Zend Technologies, Inc.
# 183
Opérations de base
Liste des opérations • • • • • • • • •
checkout update commit add cat cleanup copy delete export, import
• • • • • • • • • •
info list log merge move revert status switch lock, unlock mkdir
Copyright ©2007 Zend Technologies, Inc.
# 184
Opérations de base
Commandes usuelles
Copyright ©2007 Zend Technologies, Inc.
# 185
Opérations de base
Commande ADD • Exemple avec la commande svn add [guillaume@guillaume training]$ svn add 17_version_control A 17_version_control A 17_version_control/pictures A (bin) 17_version_control/pictures/zendstudio_svn_menu.png A (bin) 17_version_control/pictures/zendstudio_svn_commit.png A (bin) 17_version_control/pictures/zendstudio_svn_configuration.png A (bin) 17_version_control/pictures/subversion_principe.odg A (bin) 17_version_control/pictures/subversion_principe.png A (bin) 17_version_control/version_control.odp
Copyright ©2007 Zend Technologies, Inc.
# 186
Opérations de base
Commande COMMIT • Exemple avec la commande svn commit $ svn commit -m "Ajout des slides version control" 17* guillaume@notredame's password: Ajout 17_version_control Ajout 17_version_control/pictures Ajout (bin) 17_version_control/pictures/subversion_principe.odg Ajout (bin) 17_version_control/pictures/subversion_principe.png Ajout (bin) 17_version_control/pictures/zendstudio_svn_commit.png Ajout (bin) 17_version_control/pictures/zendstudio_svn_configuration.png Ajout (bin) 17_version_control/pictures/zendstudio_svn_menu.png Ajout (bin) 17_version_control/version_control.odp Ajout 17_version_control/version_control.php Transmission des données ....... Révision 96 propagée.
Copyright ©2007 Zend Technologies, Inc.
# 187
Opérations de base
Commande STATUS • Exemple avec la commande svn status [guillaume@guillaume Zend]$ svn status ? VersionControl ? Subversion ? CodingStandards ? VersionControl.php M PhpEssentials.php M Reuse.php M CodingStandards.php M Common.php
Copyright ©2007 Zend Technologies, Inc.
# 188
Opérations de base
Commande CHECKOUT • Exemple avec la commande svn checkout $ svn checkout svn+ssh://guillaume@notredame/(...)/17_version_control guillaume@notredame's password: A 17_version_control/version_control.odp A 17_version_control/version_control.php A 17_version_control/pictures A 17_version_control/pictures/subversion_principe.odg A 17_version_control/pictures/zendstudio_svn_menu.png A 17_version_control/pictures/zendstudio_svn_configuration.png A 17_version_control/pictures/zendstudio_svn_commit.png A 17_version_control/pictures/subversion_principe.png Révision 98 extraite.
Copyright ©2007 Zend Technologies, Inc.
# 189
Opérations de base
Commande UPDATE • Exemple avec la commande svn update [guillaume@guillaume Slides]$ svn update guillaume@notredame's password: A Zend/Subversion A Zend/VersionControl A Zend/VersionControl/code_subversion_update.php A Zend/VersionControl/code_subversion_status.php A Zend/VersionControl/code_subversion_checkout.php A Zend/VersionControl/code_subversion_add.php A Zend/VersionControl/code_subversion_commit.php A Zend/CodingStandards U Zend/PhpEssentials.php U Zend/Reuse.php A Zend/VersionControl.php U Zend/CodingStandards.php U Zend/Common.php Actualisé à la révision 99.
Copyright ©2007 Zend Technologies, Inc.
# 190
Opérations de base
Principe chronologique
Copyright ©2007 Zend Technologies, Inc.
# 191
Opérations de base
Utilisation de TortoiseSVN • Avec le dépôt de données (repository) fourni
Faites un 'checkout' de l'application Créez un fichier ayant pour nom le nom de votre poste et ajoutez-le (add) Supprimez également un fichier Regardez ce que la commande 'svn status' renvoie Regardez ce que la commande 'svn diff' renvoie Validez le tout avec la commande 'commit' Faites une mise à jour (update) une fois que tout le monde a validé (commit) N'hésitez pas à aller plus loin en regardant la documentation et la signification des autres options dans TortoiseSVN. Copyright ©2007 Zend Technologies, Inc.
# 192
Récupération après conflit ou erreur
Copyright © 2007, Zend Technologies Inc.
Récupération après conflit ou erreur
Introduction
• Qu'est-ce qu'un conflit ? • Résoudre un conflit • Merges automatiques • Résoudre un blocage
Copyright ©2007 Zend Technologies, Inc.
# 194
Récupération après conflit ou erreur
Qu'est-ce qu'un conflit ? • Détecter un conflit
En ligne de commande : marque 'C' devant un fichier (liste de l'update) Avec TortoiseSVN : le fichier apparaît avec une marque rouge
• Fichiers générés
Fichier .mine : votre fichier tel qu'il était avant l'update Fichier .r<1> : révision avant l'update Fichier .r<2> : révision après l'update Fichier en conflit : contient des marques >>> ... <<< aux endroits où le conflit à lieu
Copyright ©2007 Zend Technologies, Inc.
# 195
Récupération après conflit ou erreur
Générer un conflit
• Dans votre copie locale
Modifiez le fichier zend.php à la racine de l'application fournie Une fois que tout le monde a modifié, commitez tous en même temps Si la validation (commit) ne fonctionne pas, faites une mise à jour (update) Ceux qui ont un conflit déclaré ne peuvent plus valider (commit)
De nombreux updates permettent entre autre de réduire le nombre de conflits que vous pouvez avoir. Copyright ©2007 Zend Technologies, Inc.
# 196
Récupération après conflit ou erreur
Résoudre un conflit • Deux solutions
Supprimer le fichier original et renommer un métafichier (.mine ou .r<x>) en lui retirant son extension Editer le fichier original, résoudre le conflit manuellement et supprimer les métafichiers
• Remarque
Tant que les méta-fichiers existent, le conflit est actif, il n'est pas possible de valider (commit)
Copyright ©2007 Zend Technologies, Inc.
# 197
Récupération après conflit ou erreur
Résoudre le conflit
• Connecter le vidéo-projecteur sur un poste stagiaire • Sur ce poste
Résoudre le conflit manuellement
• Puis sur tous les autres postes
Supprimer le fichier et ses méta-fichiers Puis faire une mise à jour (update)
La résolution du conflit doit toujours être effectuée par une seule personne, sinon d'autres conflits seront générés. Copyright ©2007 Zend Technologies, Inc.
# 198
Récupération après conflit ou erreur
Merges automatiques • Si des modifications ont été effectuées par deux personnes en même temps dans des endroits différents d'un même fichier, Subversion va résoudre le conflit automatiquement
Les modifications des deux personnes seront prises en compte Un indicateur 'G' apparaît lors d'une mise à jour (update) en ligne de commandes Il est nécessaire de tester le bon fonctionnement du fichier et de l'application en cas de merge automatique
Copyright ©2007 Zend Technologies, Inc.
# 199
Récupération après conflit ou erreur
Merge automatique
• Connecter le vidéo-projecteur sur un poste stagiaire
Modifier une ligne et en ajouter une autre en haut du fichier puis valider (commit)
• Connecter le vidéo-projecteur sur un autre poste
Modifier une ligne et en supprimer une en bas du fichier puis mettre à jour (update) Vérifier le bon fonctionnement du merge
Les merges automatiques sont activés par défaut. Se référer à la documentation de Subversion pour les considérer comme des conflits à résoudre manuellement. Copyright ©2007 Zend Technologies, Inc.
# 200
Récupération après conflit ou erreur
Résoudre un blocage • Si la copie locale devient instable
Il n'est plus possible de valider (commit) Subversion affiche un message d'erreur demandant de faire un 'cleanup'
• Résolution
A la racine de la copie locale, lancer la commande 'cleanup'
Copyright ©2007 Zend Technologies, Inc.
# 201
Récupération après conflit ou erreur
Résoudre un blocage • Si le cleanup ne résoud pas le problème
Déplacer le répertoire en erreur en dehors de la copie de travail Faire une mise à jour (update) Remplacer un par un les fichiers modifiés dans la partie mise à jour Puis valider (commit)
Copyright ©2007 Zend Technologies, Inc.
# 202
Bonnes pratiques
Copyright Š 2007, Zend Technologies Inc.
Bonnes pratiques
Introduction • Documenter le commit • Mettre à jour régulièrement • Valider du code jouable • Nommer les versions • Nommer les branches • Versions stables / instables
Copyright ©2007 Zend Technologies, Inc.
# 204
Bonnes pratiques
Documenter le commit • Lors de la validation, un message peut être saisi • A quoi bon ?
Savoir ce pour quoi les modifications ont été faites Avoir un aperçu de l'avancement Savoir qui a fait quoi
• Associé à la commande commit
la commande 'log' permet de consulter les messages émis avec commit
Copyright ©2007 Zend Technologies, Inc.
# 205
Bonnes pratiques
Commande LOG • Exemple avec la commande svn log [guillaume@guillaume 06_php_advanced]$ svn log . guillaume@notredame's password: ------------------------------------------------------------------r78 | guillaume | 2007-01-11 17:59:03 (jeu, 11 jan 2007) | 1 line Conventions de codage et corrections des bugs signalés ------------------------------------------------------------------r77 | guillaume | 2007-01-09 19:01:26 (mar, 09 jan 2007) | 1 line Corrections orthographiques sur les slides de php avancé ------------------------------------------------------------------r52 | steven | 2006-10-04 09:04:22 (mer, 04 oct 2006) | 4 lines (...) Initial import -------------------------------------------------------------------
Copyright ©2007 Zend Technologies, Inc.
# 206
Bonnes pratiques
Mettre à jour régulièrement • La mise à jour (update) permet de maintenir
votre copie de travail à jour • Elle tient compte des modifications validées par les membres de l'équipe • Elle permet de détecter et résoudre les conflits • On peut mettre à jour à n'importe quel moment
Il faudra penser à mettre à jour (update) systématiquement avant de travailler et avant de valider (commit)
Copyright ©2007 Zend Technologies, Inc.
# 207
Bonnes pratiques
Valider du code jouable • Pourquoi ?
Parce que n'importe quel export de votre application doit fonctionner, même si vous choisissez un export antérieur à la date courante. Parce que tout ce qui est validé dans le dépôt de données (repository) est enregistré à jamais. Parce que du code qui ne marche pas ne sert à rien.
Copyright ©2007 Zend Technologies, Inc.
# 208
Bonnes pratiques
Nommer les versions • Il existe deux types de versions
Les versions de fichiers, qui sont gérées par Subversion Les versions de votre application, qui sont gérées par les utilisateurs
• Nommage des versions
RELEASE_<version>_<subversion>_<revision>[_<rc>] Ex : RELEASE_1_2_1 Ex : RELEASE_2_0_0_RC1 (release candidate 1)
• Commande associée
'copy' : permet de créer des 'tags' et des 'branches'
Copyright ©2007 Zend Technologies, Inc.
# 209
Bonnes pratiques
Nommage : vocabulaire • Version
Incrémentée lors d'un gros changement global, ou une refonte.
• Sous-version (subversion)
Incrémentée lorsque des évolutions sont apportées
• Révision
Incrémentée lorsque des corrections sont apportées
• Release Candidate (RC)
Une version pas encore terminée mais disponible pour tester
Copyright ©2007 Zend Technologies, Inc.
# 210
Bonnes pratiques
Illustration chronologique
Copyright Š2007 Zend Technologies, Inc.
# 211
Bonnes pratiques
Commande copy • Subversion avancé : commande 'copy' $ svn help copy copy (cp): Recopie quelque chose dans une copie de travail ou un dépôt, avec historique. usage : copy SRC DST SRC et DST sont un chemin dans la copie de travail (CT) ou une URL : CT -> CT : copie et mise en attente pour ajout (avec historique) CT -> URL : propage immédiatement une copie de CT vers URL URL -> CT : extrait une URL dans CT, mise en attente pour ajout URL -> URL : copie côté serveur ; utilisée pour les branches et marques
Copyright ©2007 Zend Technologies, Inc.
# 212
Bonnes pratiques
Figer une version • A la racine de votre dépôt, il y a 3 répertoires
'trunk' : correspond à la branche principale 'tags' : correspond aux versions figées de l'application 'branches' : correspond aux branches de l'application
• Branchez le vidéo-projecteur sur un poste stagiaire • A l'aide de la commande 'copy', figez la version 1.0.0 de l'application dans le répertoire 'tags'
Avoir les trois répertoires 'trunk', 'branches' et 'tags' à la racine est une convention adoptée dans une majorité de projets. Copyright ©2007 Zend Technologies, Inc.
# 213
Bonnes pratiques
Créer une branche • Branchez le vidéo-projecteur sur un autre poste • A l'aide de la commande 'copy', créez une branche •
correspondant à la version 2 de l'application Une fois ceci réalisé, il est possible pour les autres stagiaires de faire un 'checkout' de la branche et de travailler dessus
Il est rare de créer une branche, mais intéressant de savoir qu'il est possible de le faire avec 'copy'. Copyright ©2007 Zend Technologies, Inc.
# 214
Utilisation dans Zend Studio
Copyright Š 2007, Zend Technologies Inc.
Utilisation dans Zend Studio
Introduction
• Configuration • Menu contextuel • Update / Commit • Diff • Status
Copyright ©2007 Zend Technologies, Inc.
# 216
Utilisation dans Zend Studio
Configuration
Copyright Š2007 Zend Technologies, Inc.
# 217
Utilisation dans Zend Studio
Menu contextuel
Copyright Š2007 Zend Technologies, Inc.
# 218
Utilisation dans Zend Studio
Update / Commit • Update
Faire clic-droit sur un dossier ou un fichier puis Subversion->update Valider avec les options par défaut Mettre un mot de passe si requis Les fichiers sont mis à jour et le rapport est affiché dans la fenêtre 'messages'
• Commit
Faire clic-droit sur un dossier ou un fichier puis Subversion->commit Spécifier le message
Copyright ©2007 Zend Technologies, Inc.
# 219
Utilisation dans Zend Studio
Commande 'diff'
Copyright Š2007 Zend Technologies, Inc.
# 220
Utilisation dans Zend Studio
Commande 'status'
Copyright Š2007 Zend Technologies, Inc.
# 221
Utilisation dans Zend Studio
Manipuler Zend Studio • • • • •
Modifiez le fichier portant le nom de votre poste Faites un diff pour voir ce que vous avez modifié Faites un status à la racine de votre copie locale Validez les modifications avec Zend Studio (commit) Mettez à jour (update) votre copie locale avec Zend Studio une fois que tout le monde à validé
Si vous n'avez pas le menu contextuel Subversion, peut-être que vous n'avez pas coché 'Subversion' dans la configuration. Copyright ©2007 Zend Technologies, Inc.
# 222
Opérations Avancées
Copyright © 2007, Zend Technologies Inc.
Opérations Avancées
Commandes d'administration • svnadmin create : création d'un dépôt de données • svnadmin dump : sauvegarde d'un dépôt
Note options : incremental, d'une version à une autre
• svnadmin load : rechargement d'un dump • svnadmin hotcopy : copie à chaud d'un dépôt • svnadmin deltify : compression du dépôt • Autres commandes
verify, lslocks, rmlocks, lstxns, rmtxns, setlog, list-dblogs, list-unused-dblogs
Copyright ©2007 Zend Technologies, Inc.
# 224
Opérations Avancées
A vous la parole • Comment revenir sur une version précédente ?
D'un fichier ? D'une application ?
• Comment déplacer ou renommer un fichier dans une copie locale ?
Quels sont les risques ?
• Comment récupérer un fichier supprimé ?
Copyright ©2007 Zend Technologies, Inc.
# 225
Merci de votre attention !
Copyright Š 2007, Zend Technologies Inc.
Standards de codage
Avez-vous des questions ? • D'ordre général sur notre formation ? • Sur un point précis qui pose problème ? • Sur un point précis à approfondir ? • Sur un tout autre sujet ?
Copyright ©2007 Zend Technologies, Inc.
# 227