|EN?|FR|
Voici les normes à respecter pour contribuer en PHP.
Normes de base
On va utiliser des tabulations au lieu d'espaces pour la mise en forme.
{TAB} = Tabulation
= espace
Les fichiers doivent être au format UNIX et non DOS. C'est à dire pour example que les fins de lignes sont des "\n" et non des "\n\r".
L'encodage des fichiers devra être de préférence en UTF-8, ceci aide l'écriture de tout les echanges avec le format XML et l' AJAX.
Les entêtes
Voici comment doit être écrit l'entête d'un fichier :
<?php /* * Centreon is developped with GPL Licence 2.0 : * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt * Developped by : Julien Mathis - Romain Le Merlus * * The Software is provided to you AS IS and WITH ALL FAULTS. * Centreon makes no representation and gives no warranty whatsoever, * whether express or implied, and without limitation, with regard to the quality, * any particular or intended purpose of the Software found on the Centreon web site. * In no event will Centreon be liable for any direct, indirect, punitive, special, * incidental or consequential damages however they may arise and even if Centreon has * been previously advised of the possibility of such damages. * * For information : contact@centreon.com */ /* * {DESCRIPTION} * * PHP version 5 * * @package {PACKAGE_NAME} * @version $Id: $ * @copyright (c) 2007-2008 Centreon * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt */ ?>
Les instruction require, include
Pour les instrutions du style require, include, ... on ne positionera pas de parenthèses.
- Bon
<?php require 'Toto.php'; ?>
- Mauvais
<?php require('Toto.php'); ?>
Les variables
Pour le nomage des variables, la norme est que la première lettre est en minuscule et que la lettre de chaque mot soit majuscule ensuite et le tout attaché.
- Bon
<?php $maVariable; ?>
- Mauvais
<?php $ma_variable; $MaVariable; $mavariable; ?>
Les structures de contôles
Les structures de contrôles sont toujours écrites avec les { } .
Examples de structues :
<?php if ($toto == 'titi') { {TAB}mon_action; } elseif (($tutu == 'tutu') && !$titi) { {TAB}mon_action2; } while ($tutu < 20) { {TAB}mon_action3; } switch ($test) { {TAB}case 'tutu': {TAB}{TAB}mon_action4; {TAB}{TAB}break; {TAB}default: {TAB}{TAB}mon_action5; {TAB}{TAB}break; } ?>
Les fonctions
Pour le nomage des fonctions, la norme est que la première lettre est en minuscule et que la lettre de chaque mot soit majuscule ensuite et le tout attaché.
- Bon
<?php function maFonction($toto, $titi = '') { {TAB}definition; } ?>
- Mauvais
<?php function ma_fonction($toto, $titi = '') { {TAB}definition; } ?> <?php function MaFonction($toto, $titi = '') { {TAB}definition; } ?>
La documentation comme si dessous :
<?php /* * {DESCRIPTION_COURTE} * * {DESCRIPTION_LONGUE} (s'il y en a besoin) * * <code> * Un exemple d'utilisation si besoin * </code> * * @param{TAB}int{TAB}$argument1{TAB}Mon premier argument * @param{TAB}string{TAB}$argument2{TAB}Mon deuxième argument * @return{TAB}int{TAB}Ma valeur de retour */ function maFunction($argument1, $argument2 = '') { {TAB}actions {TAB}return $valeur; } ?>
Les classes
Pour les noms des classes, la norme est que la première de chaque mot soit en majuscule et le tout attaché. Le nom d'une classe commence toujours par Centreon.
- Bon
<?php class CentreonMaClasse { } ?>
- Mauvais
<?php class Ma_Classe { } class maClasse { } class ma_classe { } ?>
Les fonctions et les variables dans les classes doivent être préfixées par 'public', 'private', 'protected'. Le nom des variables commencent par un _ quand celle-ci est privée.
Pour la documentation, il faut reprendre les informations de bases.
<?php /* * {DESCRIPTION_COURTE} * * {DESCRIPTION_LONGUE} * * @package {PACKAGE_NAME} * @version Release: {VERSION} */ class MaClass { {TAB}/* {TAB} * {DESCRIPTION} {TAB} * {TAB} * @var string {TAB} * @access private {TAB} */ {TAB}private $_var1; {TAB}/* {TAB} * {DESCRIPTION_COURTE} {TAB} * {TAB} * {DESCRIPTION_LONGUE} (s'il y en a besoin) {TAB} * {TAB} * <code> {TAB} * Un exemple d'utilisation si besoin {TAB} * </code> {TAB} * {TAB} * @access public {TAB} * @param{TAB}int{TAB}$arg{TAB}Mon argument {TAB} * @return{TAB}int{TAB}Ma valeur de retour {TAB} * @deprecated Method deprecated in Release 2 (si besoin) {TAB} */ {TAB}public function maFonction($arg) { {TAB}{TAB}return 1; {TAB}} } ?>
Une petite exception pour le nom des classes, on peut avoir un _ quand la classe fait partie d'un sous-ensemble.
Example :
La gestion de l'authentification
<?php class CentreonAuth { } ?>
Pour l'authentification par la base de données, elle dépend de la classe précédante.
<?php class CentreonAuth_DB { } ?>
Le nommage des fichiers sera le nom de la classe, pour les classes d'un groupe on utilisera un répertoire.
Exemple :
- class CentreonAuth => CentreonAuth.php
- class CentreonAuth_DB => CentreonAuth/DB.php
La gestion des erreurs
Pour la gestion des erreurs, on préférera lever une exception que de faire un retour alternatif.
Il faut penser à mettre dans la documentation l'exception :
<?php /* * Ma fonction qui léve une exception * * @throws Exception Description * @return string Ma chaine de retour */ function maFonction() { {TAB}if (!$ok) { {TAB}{TAB}throw new Exception('Erreur'); {TAB}} {TAB}return 'Ca marche'; } ?>
Les requêtes SQL
Pour les requêtes SQL, on essayera de passer par des prepare statement dans la plus part des cas.
Ensuite on formatera le code comme il suit :
<?php $sql = "SELECT `name`, `value` {TAB}FROM `table_name` {TAB}WHERE `id` = :id AND `enabled` = :enable"; $sql = "SELECT `name`, `value` {TAB}FROM `table_name` {TAB}WHERE `id` = :id AND `enabled` = :enable {TAB}{TAB}AND `valid` = 1 {TAB}ORDER BY `name`"; $sql = "INSERT INTO `table_name` {TAB}(`name`, `value`) {TAB}VALUES (:name, :value)"; $sql = "UPDATE `table_name` {TAB}SET `value` = :value {TAB}WHERE `name` = :name"; ?>
Il est aussi obligatoire d'encadrer les noms de champs et noms de tables par des `.
Optimisations
Voici une série de fonctions à utiliser de préférence par rapport à d'autre :
| Bonne | Mauvaise |
| count | sizeof |
| is_int | is_integer |
| rtrim | chop |
| floatval | doubleval |
| fputs | fwrite |
| implode | join |
| ini_set | ini_alter |
Merci aussi de ne pas utiliser les fonctions suivantes :
- array_key_exists
Source : http://torrentialwebdev.com/blog/archives/116-7-tips-for-lightning-fast-PHP-sites.html
