Bonnes pratiques pour les plugins - rjullien/Jeedom-Plugins-Extra GitHub Wiki

Le code doit être compatible avec PHP 5.6 pour fonctionner parfaitement avec Jeedom Core de Jeedom SAS

Coding Style Guide

Les plugins doivent respecter PSR-2, ce sont des guidelines communément admises dans le monde PHP. Elles sont une bonne base.

DANS LES GRANDES LIGNES NOUS POUVONS RETENIR :

L’indentation se fait avec 4 espaces et non des tabulations, de cette manière le rendu est identique sur tous les IDE. Il est possible de configurer son IDE pour que l’appui sur la touche Tab produise 4 espaces.

Les classes sont nommées en StudlyCaps n’est à dire que la première lettre est une majuscule. Il n’y a pas de underscore ou de tiret bas dans le nom.

Exemple:

<?php

namespace Vendor\Package;

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // method body
    }
}

Les attributs d'une class

Les attributs sont nommés en camelCase, c'est à dire que la première lettre est en minuscule. Il n’y a pas de underscore ou de tiret bas dans le nom. Si il existe des getter/setter pour ces attributs, les setters doivent renvoyer $this. Renvoyer $this permet de chainer les setters.

Exemple :

<?php

$foo->setBar('plouf')->setBaz(1);

Les méthodes d'une class

Les méthodes sont nommés en camelCase, c'est à dire que la première lettre est en minuscule. Il n’y a pas de underscore ou de tiret bas dans le nom.

Exemple:

<?php

namespace Vendor\Package;

class ClassName
{
    private $foo;
    
    private $barBaz;

    public function setFoo($foo)
    {
        $this->foo = $foo;
        return $this;
    }

}

Usage des namespaces

Actuellement (01/2018), seul le namespace global (le slash ) est utilisé par je projet Jeedom. Comme le but est aussi de se préparer pour l'avenir, chaque fois qu'une classe native de PHP est utilisé, il faut précéder son nom de \ .

Exemple :

<?php

$data =  new \DateTime();

Les comparaisons à null ou à un booléen

Toues les comparaisons à null ou à un booléen doivent être comparées strictement. La comparaison stricte optimise l'exécution du code.

Avec les booléens et null, seule la comparaison stricte (avec === ) devrait être utilisée pour réduire les risques de bugs et améliorer les performances.

Fichiers de class PHP

Les fichiers sont nommés comme les classes c’est-à-dire avec la première lettre en majuscule avec .class.php comme extension*.

D’une manière générale, un fichier PHP ne contiens qu’une seule classe. Il faut créer autant de fichiers que de classes. C'est un principe de séparation des responsabilités.

/!\ Fin de fichier php

Si un fichier se termine par du code PHP et ne comporte rien ensuite (pas de html), il ne faut pas mettre de balise fermante PHP ?> . Il y a un risque qu'une entête HTML sont générée pouvant entrainer l’arrêt de l’exécution du code..

Extrais de la Doc de PHP

Si un fichier est purement du code PHP, il est préférable de ne pas placer la balise de fermeture à la fin du fichier. Ceci permet d'éviter d'oublier un espace ou une nouvelle ligne après la balise de fermeture de PHP, ce qui causerait des effets non voulus car PHP commencera à afficher la sortie, ce qui n'est souvent pas ce qui est désiré.

Les test unitaires

Les tests unitaires sont optionnels, cependant si ils existent, ils doivent être créé avec PhpUnit

*C'est une entorse au PSR-2 due à la compatibilité avec le Jeedom Core

Work in progress...