Post on 17-Mar-2016
description
transcript
Copyright © 2007, Zend Technologies Inc.
Formation Zend Studio / Zend Platform, Standards de codage, migration PHP 5 & gestion de versions
Arawak
Copyright ©2007 Zend Technologies, Inc. # 2
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.
Zend Studio: Introduction
Copyright ©2007 Zend Technologies, Inc. # 4
Zend Studio: IntroductionFonctionnalités
Colorisation syntaxique
personnalisable
Mise en évidence des erreurs en
temps réel
Complétion de code PHP
Gestionnaire de fichiers
Client FTP
Inspecteurs
Copyright ©2007 Zend Technologies, Inc. # 5
Zend Studio: IntroductionInté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. # 6
Zend Studio: IntroductionGabarits
Les gabarits vous permettent de travailler plus rapidement, avec moins de risque d'erreurs de frappe (menu Outils > Personnalisation)
Copyright ©2007 Zend Technologies, Inc. # 7
Zend Studio: IntroductionAssistant PHPDocumentorEn utilisant l'assistant PHPDocumentor, vous pouvez facilement générer la documentation API de votre application Ajouter des
fichiers
Ajouter des répertoires
Ajouter les fichiers qui ne doivent
pas être inclus
Copyright ©2007 Zend Technologies, Inc. # 8
Zend Studio: IntroductionAssistant PHPDocumentor
Copyright ©2007 Zend Technologies, Inc. # 9
Zend Studio: IntroductionAssistant PHPDocumentor
Copyright © 2007, Zend Technologies Inc.
Zend Studio: Editeur
Copyright ©2007 Zend Technologies, Inc. # 11
Zend Studio: EditeurInté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. # 12
Zend Studio: EditeurInté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. # 13
Zend Studio: EditeurIntégration PHPDoc, exemple
Copyright ©2007 Zend Technologies, Inc. # 14
Zend Studio: EditeurComplétion de code
• Accès facile aux: Classes Fonctions Variables Constantes Mots-clés Balises HTML Attributs Valeurs d'attributsetc...
Copyright ©2007 Zend Technologies, Inc. # 15
Zend Studio: EditeurComplé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. # 16
Zend Studio: EditeurComplé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. # 17
Zend Studio: EditeurComplétion de codela classe ClasseDeComplétion Sans commentaires PHPDoc
Avec commentaires PHPDoc
Copyright ©2007 Zend Technologies, Inc. # 18
Zend Studio: EditeurSignets
Utilisez les signets dans le document actif pourmarquer des lignes de code (par clic droit sur la marge àhauteur de la ligne ou en appuyant sur la touche <F2>)
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
Signet
Signet Signet
Signet
Commentaire du signet
Copyright ©2007 Zend Technologies, Inc. # 19
Zend Studio: EditeurSignets
Gérez vos signets avec le gestionnaire de signets
Ajoutez des descriptions à vos signets
Copyright ©2007 Zend Technologies, Inc. # 20
Zend Studio: EditeurExercices
• 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.
Zend Studio : Travailler Avec Des Projets
Copyright ©2007 Zend Technologies, Inc. # 22
Travailler Avec des ProjetsCréer un nouveau projet
Création d'un nouveau projetL'assistant vous guide pour déterminer les propriétés de votre nouveau projet
Copyright ©2007 Zend Technologies, Inc. # 23
Travailler Avec des ProjetsUtilité 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. # 24
Travailler Avec des ProjetsAjouter des fichiers
Ajouter des fichiers à un projet
Copyright ©2007 Zend Technologies, Inc. # 25
Travailler Avec des ProjetsLes 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. # 26
Travailler Avec des ProjetsLes 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. # 27
Travailler Avec des ProjetsExercices
• 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.
Zend Studio : Débogage
Copyright ©2007 Zend Technologies, Inc. # 29
Zend Studio: DébogageDé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. # 30
Zend Studio: DébogageExercice
• 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. # 31
Zend Studio: DébogageServeur de débogage
Zend Platform
Zend Platform Configuration:
Copyright ©2007 Zend Technologies, Inc. # 32
Zend Studio: DébogageServeur 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. # 33
Zend Studio DébogageConfiguration 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. # 34
Zend Studio DébogageDiffé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. # 35
Zend Studio DébogageDiffé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. # 36
Zend Studio DébogageLa 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. # 37
Zend Studio DébogageProfilage• 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. # 38
Zend Studio DébogageProfilage, 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. # 39
Zend Studio DébogageProfilage, Fonctions statiques
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, ...)
• Fournit des informations générales sur:
Copyright ©2007 Zend Technologies, Inc. # 40
Zend Studio DébogageProfilage, Trace d'appel• Affichage hiërarchique des fonctions selon leur ordre
d'exécution• Vous permet de:
Sauter à la fonction dans le code par double-clic
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. # 41
Zend Studio DébogageExercices
• 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. # 42
Zend Studio: Fonctionnalités SupplémentairesNavigateur 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
Consultez les utilisateurs de
la base de données
Exécutez des requêtes
Passez facilement d'un serveur, base de
données ou schéma à un
autre
Copyright ©2007 Zend Technologies, Inc. # 43
Zend Studio: Fonctionnalités SupplémentairesGénérateur WSDLLe 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. # 44
Zend Studio: Fonctionnalités SupplémentairesVersionnage• 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.
Zend Platform pour les développeurs
Copyright ©2007 Zend Technologies, Inc. # 46
Zend Platform pour les développeursIntroduction: Architecture
Copyright ©2007 Zend Technologies, Inc. # 47
Zend Platform pour les développeursModule 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. # 48
Zend Platform pour les développeursModule 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. # 49
Zend Platform pour les développeursModule 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. # 50
Zend Platform pour les développeursModule 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 synchroniserles sessions ?
Copyright ©2007 Zend Technologies, Inc. # 51
Zend Platform pour les développeursModule 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. # 52
Zend Platform pour les développeursModule 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. # 53
Zend Platform pour les développeursModule 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. # 54
Zend Platform pour les développeursModule Java Bridge: exemple
• Exemple de communication avec une application Java
Copyright ©2007 Zend Technologies, Inc. # 55
Zend Platform pour les développeursModule 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. # 56
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. # 57
Zend Platform pour les développeursModule PHP Intelligence, Event list
• Une vue de la liste des évènements
Copyright ©2007 Zend Technologies, Inc. # 58
Zend Platform pour les développeursModule PHP Intelligence, Event details
Informatons sur le script PHP
générant l'évènement
Intégration avec Zend
Studio
Données contextuelles
à l'évènement
Afficher le code source
du script
Copyright ©2007 Zend Technologies, Inc. # 59
Zend Platform pour les développeursPHP 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
Lance une session de profilage dans Zend Studio
comprenant toutes les données contextuelles de
l'évènement
Ouvre le code source du script dans Zend Studio
Copyright ©2007 Zend Technologies, Inc. # 60
Zend Platform pour les développeursModule PHP Intelligence, Event triggers
• Définir les évènements capturés
Copyright ©2007 Zend Technologies, Inc. # 61
Zend Platform pour les développeursModule PHP Intelligence, Graphs
• Statistiques d'évènements par serveur
Copyright ©2007 Zend Technologies, Inc. # 62
Zend Platform pour les développeursAPI 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. # 63
Zend Platform pour les développeursAPI 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. # 64
Zend Platform pour les développeursExercices
• 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 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.
Zend Platform pour les développeursZend Platform pour les développeurs
pour ces deux derniers points, vous pouvez utiliser les fonctions qui vous semblent les plus appropriées
Copyright © 2007, Zend Technologies Inc.
Standards de codage
Copyright ©2007 Zend Technologies, Inc. # 66
Standards de codage
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.
• Pratiques et procédures courantes• Conventions de nommage et de formattage• Fonctionnalités recommandées• Bonnes pratiques
Copyright © 2007, Zend Technologies Inc.
Conventions : généralités
Copyright ©2007 Zend Technologies, Inc. # 68
Conventions : généralitésPratiques 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. # 69
Conventions : généralitésPratiques 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. # 70
Conventions : généralitésScope 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. # 71
Conventions : généralitésScope 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.
Formatage des fichiers
Copyright ©2007 Zend Technologies, Inc. # 73
Formattage des fichiersGé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. # 74
Formattage des fichiersIndentation, 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. # 75
Formattage des fichiersTerminaison 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.
Conventions de nommage
Copyright ©2007 Zend Technologies, Inc. # 77
Conventions de nommageClasses
• 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. # 78
Conventions de nommageClasses
• 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. # 79
Conventions de nommageClasses
• 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. # 80
Conventions de nommageClasses
• 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. # 81
Conventions de nommageClasses
• Voici 3 exemples de noms de classes autorisés :
Zend_DbZend_ViewZend_View_Helper
Copyright ©2007 Zend Technologies, Inc. # 82
Conventions de nommageInterfaces
• 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. # 83
Conventions de nommageInterfaces
• Nommage des interfaces
Zend_Log_Adapter_InterfaceZend_Controller_Dispatcher_Interface
Copyright ©2007 Zend Technologies, Inc. # 84
Conventions de nommageNoms 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. # 85
Conventions de nommageNoms de fichier
• Exemples de noms de fichiers valides
Zend/Db.phpZend/Controller/Front.phpZend/View/Helper/FormRadio.php
Copyright ©2007 Zend Technologies, Inc. # 86
Conventions de nommagefonctions 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. # 87
Conventions de nommagefonctions et méthodes
• Noms acceptables pour des fonctions
filterInput()getElementById()widgetFactory()
Copyright ©2007 Zend Technologies, Inc. # 88
Conventions de nommageVariables
• 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. # 89
Conventions de nommageConstantes
• 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.
Style de codage
Copyright ©2007 Zend Technologies, Inc. # 91
Style de codageDé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. # 92
Style de codageChaî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. # 93
Style de codageSubstitution 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. # 94
Style de codageConcaté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. # 95
Style de codageConcaté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. # 96
Style de codageVerifier 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. # 97
Style de codageTableaux
• 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. # 98
Style de codageTableaux
• 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. # 99
Style de codageTableaux
• 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. # 100
Style de codageCheck 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. # 101
Style de codageDé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. # 102
Style de codageDé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. # 103
Style de codageComplé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. # 104
Style de codageVariables 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. # 105
Style de codageFonctions, 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. # 106
Style de codageFonctions, 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. # 107
Style de codageFonctions, 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. # 108
Style de codageFonctions, 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. # 109
Style de codageFonctions, méthodes
• Retour de fonction
function foo(){ // INCORRECT return($this->bar); // CORRECT return $this->bar;}
Copyright ©2007 Zend Technologies, Inc. # 110
Style de codageVé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. # 111
Style de codageUsage 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. # 112
Style de codageDé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. # 113
Style de codageStructure 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. # 114
Style de codageStructure 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. # 115
Style de codageStructure de contrôle : if / else
• Exemple avec if, else, elseif
if ($a != 2) { $a = 2;}if ($a != 2) { $a = 2;} else { $a = 7;}
Copyright ©2007 Zend Technologies, Inc. # 116
Style de codageStructure 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. # 117
Style de codageStructure 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. # 118
Style de codageStructure 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. # 119
Style de codageStructure de contrôle : Switch
• Exemple avec switch
switch ($numPeople) { case 1: break; case 2: break; default: break;}
Copyright ©2007 Zend Technologies, Inc. # 120
Style de codageStructure 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. # 121
Style de codageIf 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.
La PHPDOC
Copyright ©2007 Zend Technologies, Inc. # 123
La PHPDOCIntroduction
• 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. # 124
La PHPDOCImportance 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. # 125
La PHPDOCStructure de la PHPDOC
• La PHPDOC est reconnaissable à sa structure
/** * Je suis un commentaire PHPDOC ! */
Copyright ©2007 Zend Technologies, Inc. # 126
La PHPDOCLes 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. # 127
La PHPDOCLes 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. # 128
La PHPDOCLes 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. # 129
La PHPDOCLes 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. # 130
La PHPDOCLes 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. # 131
La PHPDOCComplé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. # 132
La PHPDOCComplétion dans Zend Studio
Copyright ©2007 Zend Technologies, Inc. # 133
La PHPDOCDocumentation 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.
Migration vers PHP 5
Copyright ©2007 Zend Technologies, Inc. # 135
Migration vers PHP 5 - IntroductionPourquoi 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. # 136
Migration vers PHP 5
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.
• 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
Copyright © 2007, Zend Technologies Inc.
Ce qui change entre PHP 4 et PHP 5
Copyright ©2007 Zend Technologies, Inc. # 138
Ce qui change entre PHP 4 et PHP 5Diffé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. # 139
Ce qui change entre PHP 4 et PHP 5Diffé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. # 140
Ce qui change entre PHP 4 et PHP 5Diffé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. # 141
Ce qui change entre PHP 4 et PHP 5Apports 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. # 142
Ce qui change entre PHP 4 et PHP 5Diffé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.
Préparer un plan de migration
Copyright ©2007 Zend Technologies, Inc. # 144
Préparer un plan de migrationQuelle 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. # 145
Préparer un plan de migrationPré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. # 146
Préparer un plan de migrationEtapes 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. # 147
Préparer un plan de migrationEn 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. # 148
Préparer un plan de migrationEn 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.
L'étape de l'adaptation
Copyright ©2007 Zend Technologies, Inc. # 150
L'étape de l'adaptationPlan 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. # 151
L'étape de l'adaptationCheck : 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. # 152
L'étape de l'adaptationVé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. # 153
L'étape de l'adaptationPHP 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. # 154
L'étape de l'adaptationVé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. # 155
L'étape de l'adaptationAdaptation des classes
• Passage par référence = même objet
<?phpfunction 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. # 156
L'étape de l'adaptationMé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. # 157
L'étape de l'adaptationPHP 5, ZE II
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 !
• 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
Copyright © 2007, Zend Technologies Inc.
L'étape de l'optimisation
Copyright ©2007 Zend Technologies, Inc. # 159
L'étape de l'optimisationPlan 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. # 160
L'étape de l'optimisationPassage 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. # 161
L'étape de l'optimisationAdoption 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. # 162
L'étape de l'optimisationRemaniement 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.
Outils pour la migration
Copyright ©2007 Zend Technologies, Inc. # 164
Outils pour la migrationUtilité 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. # 165
Outils pour la migrationDiversité des outils
Copyright ©2007 Zend Technologies, Inc. # 166
Outils pour la migrationLes 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. # 167
Outils pour la migrationMé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. # 168
Outils pour la migrationUn 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.
La gestion des versions
Copyright ©2007 Zend Technologies, Inc. # 170
La gestion des versionsIntroduction
• 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.
Principe du versionnage
Copyright ©2007 Zend Technologies, Inc. # 172
Principe du versionnageIntroduction
• Objectifs, utilité• Principe global• Le serveur• Le client
Copyright ©2007 Zend Technologies, Inc. # 173
Principe du versionnageObjectifs, 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. # 174
Principe du versionnagePrincipe global
Copyright ©2007 Zend Technologies, Inc. # 175
Principe du versionnageLe 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. # 176
Principe du versionnageLe client
• Un logiciel 'client' (TortoiseSVN...)• La dernière copie de travail en cours• Des méta-fichiers (.svn, .cvs)
Copyright © 2007, Zend Technologies Inc.
Outils existants
Copyright ©2007 Zend Technologies, Inc. # 178
Outils existantsIntroduction
• CVS et Subversion• Fonctionnalités de Subversion
Copyright ©2007 Zend Technologies, Inc. # 179
Outils existantsCVS 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. # 180
Outils existantsFonctionnalité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. # 181
Outils existantsInstallation 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.
Opérations de base
Copyright ©2007 Zend Technologies, Inc. # 183
Opérations de baseIntroduction
• Liste des opérations• Exemples d'utilisation en ligne de commandes
Copyright ©2007 Zend Technologies, Inc. # 184
Opérations de baseListe 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. # 185
Opérations de baseCommandes usuelles
Copyright ©2007 Zend Technologies, Inc. # 186
Opérations de baseCommande ADD
• Exemple avec la commande svn add
[guillaume@guillaume training]$ svn add 17_version_controlA 17_version_controlA 17_version_control/picturesA (bin) 17_version_control/pictures/zendstudio_svn_menu.pngA (bin) 17_version_control/pictures/zendstudio_svn_commit.pngA (bin) 17_version_control/pictures/zendstudio_svn_configuration.pngA (bin) 17_version_control/pictures/subversion_principe.odgA (bin) 17_version_control/pictures/subversion_principe.pngA (bin) 17_version_control/version_control.odp
Copyright ©2007 Zend Technologies, Inc. # 187
Opérations de baseCommande COMMIT
• Exemple avec la commande svn commit
$ svn commit -m "Ajout des slides version control" 17*guillaume@notredame's password:Ajout 17_version_controlAjout 17_version_control/picturesAjout (bin) 17_version_control/pictures/subversion_principe.odgAjout (bin) 17_version_control/pictures/subversion_principe.pngAjout (bin) 17_version_control/pictures/zendstudio_svn_commit.pngAjout (bin) 17_version_control/pictures/zendstudio_svn_configuration.pngAjout (bin) 17_version_control/pictures/zendstudio_svn_menu.pngAjout (bin) 17_version_control/version_control.odpAjout 17_version_control/version_control.phpTransmission des données .......Révision 96 propagée.
Copyright ©2007 Zend Technologies, Inc. # 188
Opérations de baseCommande STATUS
• Exemple avec la commande svn status
[guillaume@guillaume Zend]$ svn status? VersionControl? Subversion? CodingStandards? VersionControl.phpM PhpEssentials.phpM Reuse.phpM CodingStandards.phpM Common.php
Copyright ©2007 Zend Technologies, Inc. # 189
Opérations de baseCommande CHECKOUT
• Exemple avec la commande svn checkout
$ svn checkout svn+ssh://guillaume@notredame/(...)/17_version_controlguillaume@notredame's password:A 17_version_control/version_control.odpA 17_version_control/version_control.phpA 17_version_control/picturesA 17_version_control/pictures/subversion_principe.odgA 17_version_control/pictures/zendstudio_svn_menu.pngA 17_version_control/pictures/zendstudio_svn_configuration.pngA 17_version_control/pictures/zendstudio_svn_commit.pngA 17_version_control/pictures/subversion_principe.pngRévision 98 extraite.
Copyright ©2007 Zend Technologies, Inc. # 190
Opérations de baseCommande UPDATE
• Exemple avec la commande svn update
[guillaume@guillaume Slides]$ svn updateguillaume@notredame's password:A Zend/SubversionA Zend/VersionControlA Zend/VersionControl/code_subversion_update.phpA Zend/VersionControl/code_subversion_status.phpA Zend/VersionControl/code_subversion_checkout.phpA Zend/VersionControl/code_subversion_add.phpA Zend/VersionControl/code_subversion_commit.phpA Zend/CodingStandardsU Zend/PhpEssentials.phpU Zend/Reuse.phpA Zend/VersionControl.phpU Zend/CodingStandards.phpU Zend/Common.phpActualisé à la révision 99.
Copyright ©2007 Zend Technologies, Inc. # 191
Opérations de basePrincipe chronologique
Copyright ©2007 Zend Technologies, Inc. # 192
Opérations de baseUtilisation 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.
Récupération après conflit ou erreur
Copyright ©2007 Zend Technologies, Inc. # 194
Récupération après conflit ou erreurIntroduction
• Qu'est-ce qu'un conflit ?• Résoudre un conflit• Merges automatiques• Résoudre un blocage
Copyright ©2007 Zend Technologies, Inc. # 195
Récupération après conflit ou erreurQu'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. # 196
Récupération après conflit ou erreurGé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. # 197
Récupération après conflit ou erreurRé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. # 198
Récupération après conflit ou erreurRé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. # 199
Récupération après conflit ou erreurMerges 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. # 200
Récupération après conflit ou erreurMerge 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. # 201
Récupération après conflit ou erreurRé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. # 202
Récupération après conflit ou erreurRé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.
Bonnes pratiques
Copyright ©2007 Zend Technologies, Inc. # 204
Bonnes pratiquesIntroduction
• 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. # 205
Bonnes pratiquesDocumenter 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. # 206
Bonnes pratiquesCommande 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 lineConventions de codage et corrections des bugs signalés-------------------------------------------------------------------r77 | guillaume | 2007-01-09 19:01:26 (mar, 09 jan 2007) | 1 lineCorrections 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. # 207
Bonnes pratiquesMettre à 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. # 208
Bonnes pratiquesValider 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. # 209
Bonnes pratiquesNommer 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. # 210
Bonnes pratiquesNommage : 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. # 211
Bonnes pratiquesIllustration chronologique
Copyright ©2007 Zend Technologies, Inc. # 212
Bonnes pratiquesCommande copy
• Subversion avancé : commande 'copy'
$ svn help copycopy (cp): Recopie quelque chose dans une copie de travailou un dépôt, avec historique.usage : copy SRC DSTSRC 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. # 213
Bonnes pratiquesFiger 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. # 214
Bonnes pratiquesCré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.
Utilisation dans Zend Studio
Copyright ©2007 Zend Technologies, Inc. # 216
Utilisation dans Zend StudioIntroduction
• Configuration• Menu contextuel• Update / Commit• Diff• Status
Copyright ©2007 Zend Technologies, Inc. # 217
Utilisation dans Zend StudioConfiguration
Copyright ©2007 Zend Technologies, Inc. # 218
Utilisation dans Zend StudioMenu contextuel
Copyright ©2007 Zend Technologies, Inc. # 219
Utilisation dans Zend StudioUpdate / 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. # 220
Utilisation dans Zend StudioCommande 'diff'
Copyright ©2007 Zend Technologies, Inc. # 221
Utilisation dans Zend StudioCommande 'status'
Copyright ©2007 Zend Technologies, Inc. # 222
Utilisation dans Zend StudioManipuler 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.
Opérations Avancées
Copyright ©2007 Zend Technologies, Inc. # 224
Opérations AvancéesCommandes 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. # 225
Opérations AvancéesA 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.
Merci de votre attention !
Copyright ©2007 Zend Technologies, Inc. # 227
Standards de codageAvez-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 ?