your Quels sont les idiomes PHP utiles?




symfony naming (8)

Il y a quelques choses que je fais en PHP qui ont tendance à être spécifiques à PHP.

  1. Assemblez des chaînes avec un tableau.

    Beaucoup de manipulations de chaînes coûtent cher en PHP, j'ai donc tendance à écrire des algorithmes qui réduisent le nombre discret de manipulations de chaînes que je fais. L'exemple classique consiste à construire une chaîne avec une boucle. Commencez par un tableau (), et faites une concaténation de tableau dans la boucle. Alors implode () à la fin. (Ceci résout également le problème de la virgule.)

  2. Les constantes de tableau sont intéressantes pour implémenter des paramètres nommés aux fonctions.

Je cherche à améliorer mon code PHP et je me demande quelles sont les techniques spécifiques à PHP que d'autres programmeurs utilisent pour améliorer la productivité ou les limitations de PHP.

Quelques exemples:

  1. Convention de dénomination de classe pour gérer les espaces de noms: Part1_Part2_ClassName correspond au fichier Part1/Part2/ClassName.php

  2. if ( count($arrayName) ) // handles $arrayName being unset or empty

  3. Noms de fonctions variables, par exemple $func = 'foo'; $func($bar); // calls foo($bar); $func = 'foo'; $func($bar); // calls foo($bar);


Mon expérience avec PHP m'a appris quelques choses. Pour en nommer quelques-uns:

  • Toujours sortir les erreurs. Ce sont les deux premières lignes de mon projet type (en mode développement):
ini_set('display_errors', '1');
error_reporting(E_ALL);
  • N'utilisez jamais automagic . Des trucs comme autoLoad peuvent vous mordre dans le futur.

  • Toujours exiger des classes dépendantes utilisant require_once . De cette façon, vous pouvez être sûr que vous aurez vos dépendances directement.

  • Utilisez if(isset($array[$key])) au lieu de if($array[$key]) . La seconde déclenchera un avertissement si la clé n'est pas définie.

  • Lorsque vous définissez des variables (même avec for cycles), donnez-leur des noms verbeux ( $listIndex au lieu de $j )

  • Commentez, commentez, commentez. Si un extrait particulier de code ne semble pas évident, laissez un commentaire. Plus tard, vous devrez peut-être l'examiner et ne pas se souvenir de son but.

En dehors de cela, les conventions de nommage de classes, de fonctions et de variables dépendent de vous et de votre équipe. Dernièrement, j'ai utilisé les conventions de nommage de Zend Framework parce qu'elles me conviennent.

Aussi, et en mode de développement, je mets un gestionnaire d'erreur qui produira une page d'erreur à la moindre erreur (même des avertissements), me donnant le backtrace complet .


Déclarez les variables avant de les utiliser!


Heureusement, les espaces de noms sont en 5.3 et 6. Je recommande fortement de ne pas utiliser l'idiome Path_To_ClassName. Il fait du code désordonné, et vous ne pouvez jamais changer la structure de votre bibliothèque ... jamais.

Le chargement automatique du SPL est génial. Si vous êtes organisé, il peut vous faire économiser le bloc typique de 20 lignes d'inclusions et nécessite en haut de chaque fichier. Vous pouvez également changer les choses dans votre bibliothèque de code, et aussi longtemps que PHP peut inclure à partir de ces répertoires, rien ne casse.

Faire un usage libéral de === sur == . Par exemple:

if (array_search('needle',$array) == false) {
  // it's not there, i think...
}

donnera un faux négatif si «aiguille» est à la touche zéro. Au lieu:

if (array_search('needle',$array) === false) {
  // it's not there!
}

sera toujours précis.


Apprenez à connaître les différents types et l'opérateur === , c'est essentiel pour certaines fonctions comme strpos() et vous commencerez à utiliser return false vous-même.


  1. Activer AVIS, et si vous voulez vraiment signaler les erreurs STRICT. Cela évite beaucoup d'erreurs et d'odeurs de code: ini_set('display_errors', 1); error_reporting(E_ALL && $_STRICT); ini_set('display_errors', 1); error_reporting(E_ALL && $_STRICT);
  2. Restez à l'écart des variables globales
  3. Gardez autant de fonctions que possible. Il lit plus facile, et est facile à maintenir. Certaines personnes disent que vous devriez être en mesure de voir toute la fonction sur votre écran, ou, au moins, que les crochets de début et de fin des boucles et des structures dans la fonction devraient être à la fois sur votre écran
  4. Ne faites pas confiance à l'entrée de l'utilisateur!

En fin de compte, vous tirerez le meilleur parti de PHP en apprenant d'habitude de bonnes pratiques de programmation, avant de vous concentrer sur quoi que ce soit de spécifique à PHP. Ayant dit cela...

Appliquer généreusement pour le plaisir et le profit:

  1. Iterators dans les boucles foreach. Il n'y a presque jamais un mauvais moment.

  2. Conception autour de l'auto-chargement de classe. Utilisez spl_autoload_register() , pas __autoload() . Pour les points bonus, faites scanner une arborescence de répertoires de manière récursive, puis n'hésitez pas à réorganiser vos classes dans une structure de répertoire plus logique.

  3. Typehint partout. Utilisez des assertions pour les scalaires.

    function f(SomeClass $x, array $y, $z) {
        assert(is_bool($z))
    }
  4. Sortie quelque chose d'autre que HTML.

    header('Content-type: text/xml'); // or text/css, application/pdf, or...
  5. Apprendre à utiliser des exceptions Ecrivez un gestionnaire d'erreurs qui convertit les erreurs en exceptions.

  6. Remplacez vos constantes globales define() des constantes de classe.

  7. Remplacez vos horodatages Unix par une classe Date appropriée.

  8. Dans les fonctions longues, les variables unset() lorsque vous avez terminé avec eux.

Utilisez avec plaisir coupable:

  1. Boucle sur les membres de données d'un objet comme un tableau. Se sentir coupable qu'ils ne sont pas déclarés privés. Ce n'est pas une langue païenne comme Python ou Lisp.

  2. Utilisez des tampons de sortie pour assembler des chaînes longues.

    ob_start();
    echo "whatever\n";
    debug_print_backtrace();
    $s = ob_get_clean();

Évitez à moins que ce ne soit absolument nécessaire, et probablement pas encore, à moins que vous ne détestiez vraiment les programmeurs de maintenance, et vous-même:

  1. Méthodes magiques ( __get , __set , __call )

  2. extract()

  3. Tableaux structurés - utilisez un objet






conventions