Myllaume

Espace numérique de Guillaume Brioudes

PHP

Généralités

// On évitera
echo "Je m'appelle $prenom $nom";

// On préfèrera
echo 'Je m\'apelle '$prenom . ' ' . $nom;
<?php if ($can_access): ?>
<p>Bienvenue <?= $nom ?>.</p>
<?php else: ?>
<p>Aucun accès...</p>
<?php endif; ?>

<ul>
<?php foreach($tableau as $cle => $valeur): ?>
    <li><?= $valeur ?></li>
<?php endforeach; ?>
</ul>

Commentaires

Les commentaires PHP recourent à différents tags pour rapporter certaines métadonnées aux lecteurs, voire pour générer de la documentation à partir du code avec phpDocumentor.

Fichiers

Au début des fichiers on peut renseigner le tag @category pour relier le fichier à un ensemble, le @author pour indiquer un auteur, mais aussi une licence avec @license. On peut aussi signaler des tâches @todo qui restent à réaliser dans le fichier.

/**
 * Class Users
 * Liée à la table 'Users' de la bdd
 * @category class
 * @author Guillaume Brioudes <guillaume.brioudes@myllaume.fr>
 * @license Creative Commons BY-SA 4.0
 * @todo liaison avec la session
 */

Fonctions et méthodes

On précise pour les fonctions après le tag @param quels sont les paramètres et leur type à entrer, après @trows les exceptions jetées, après @return les valeurs retournées par la fonction et leur type.

/**
 * Hashage d'un mot de passe
 * @param string $password mot de passe utilisateur de minimum '$pwd_length'
 * caractères avec minuscules, majuscules, chiffres et caract. spéciaux
 * @param int $pwd_length longueure du mot de passe
 * @throws string mot de passe non conforme
 * @return string mot de passe hashé
 */

function hash_password($password, $pwd_length) {
    if (strlen($var) < $pwd_length ||
        !preg_match('##^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W)##', $var)) {

        throw new Exception('Le mot de passe n\'est pas conforme.');
    }

    $password_hashed = password_hash($password, PASSWORD_DEFAULT);
}

Traitement de données

Conditionnelles

Les tests doivent être fait avec des constantes pour un code bien lisible.

const MAX_USER = 50;

if ($nb_user < MAX_USER) {
    // traitement
}

Les conditionnelles doivent être rigoureusement établies, ne pas laisser de doute possible sur les valeurs à obtenir.

// on évitera

if ($array) {
    // traitement
}

if ($is_not_null) {
    // traitement
}

// on préfèrera

if (!empty($array)) {
    // traitement
}

if ($is_not_null != 0) {
    // traitement
}

Base de données

Bonne pratiques pour gérer des données via PHP en orienté objet :

Performances et lisibilité

Chaque variable, boucle, inclusion nécessite des ressources et il faut envisager, lorsque c'est possible, d'adapter sa méthode afin de soulager le serveur. Le bon sens et les indications suivantes permettent de limiter l'impact ; toujours est-il qu'une page statique HTML est ce qu'il y a de mieux – faire du cache.

// Destruction de plusieurs variables
unset($var1, $var2);

Orienté objet

S'il ne faut pas en abuser (le procédural reste plus rapide), le développement orienté objet fournit un code plus lisible. Il garantit l'intégrité des données et permet d'isoler des fonctionnalités.