Comment je démarre un projet en PHP
Lorsque je commence à développer une nouvelle application, j’ai pris l’habitude de tout de suite effectuer quelques actions et de mettre en place des outils. Je vous propose donc de les partager avec vous.
Première chose que je fais, je versionne mon projet en local. L’avantage avec git
est que cela se fait en une seule commande. Rien de plus simple pour initialiser mon projet : je me place dans le répertoire de mon projet et j’exécute la commande suivante :
git init
Voilà, c’est fait ! Je peux désormais versionner mon application au fur et à mesure et revenir en arrière si besoin. Et si je le souhaite, je pourrai le sauvegarder ou le partager plus tard sur un serveur (comme GitHub, par exemple).
PHP, comme d'autres langages, possède une notion d'espace de nom. Pour citer la documentation :
Les espaces de noms PHP fournissent un moyen pour regrouper des classes, interfaces, fonctions ou constantes.
Afin de pouvoir utiliser facilement ces espaces de nom, il est nécessaire d'utiliser un autoloader. Et ça tombe bien, un outil permet d'en générer un simplement : composer
.
Composer est un outil de gestion de dépendances qui apporte aussi plein d'autres fonctionnalités comme fournir un autoloader.
composer init
Appuyez sur entrée à la question : "Add PSR-4 autoload mapping? Maps namespace "Jimmy\Project" to the entered relative path. [src/, n to skip]:" pour mettre en place l'autoloader.
include_once('./vendor/autoload.php');
Après quelques années à écrire du code sans réelle règle, je me suis aperçu que lorsqu’on travaillait en équipe, les manières d’écrire le code variaient beaucoup d’une personne à l’autre. Et cela s’est beaucoup plus ressenti lorsque, dans mon travail, nous avons commencé à faire de la review de code. Les différentes façons d'écrire rendait la relecture un peu plus difficile. Nous avons donc choisi une norme d’écriture que nous suivons.
L’autre avantage est que si vous développez une application open-source, vous pourrez indiquer à vos éventuels contributeurs de respecter la norme choisie afin d'avoir un code uniforme.
J’applique désormais tout le temps pour chaque nouveau projet une norme d’écriture. Je passe par plusieurs moyens pour la contrôler :
L'outil que j'utilise est PHP_CodeSniffer (phpcs
). Pour l'installer et l'utiliser, suivez les instructions suivantes :
composer
composer require --dev squizlabs/php_codesniffer
.phpcs.xml
<?xml version="1.0"?>
<ruleset>
<rule ref="PSR12"/>
<file>src/</file>
<arg name="colors"/>
</ruleset>
vendor/bin/phpcs
L'avantage d'avoir un outil en ligne de commande est qu'il peut être lancé automatiquement via un hook git ou par un serveur d'intégration continue.
Même si je ne pratique pas strictement le TDD, je mets tout de suite en place un outil de tests unitaires. Tant qu’à être dans la configuration de mon projet, autant le faire même si mes premiers développements ne sont pas forcément testés. Au moins je n’ai aucune excuse pour ne pas écrire de tests.
De la même manière que pour la norme d'écriture, j'exécute mes tests unitaires en ligne de commande et pourrais donc facilement le lancer automatiquement.
J'utilise pest
.
composer require --dev pestphp/pest
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
cacheResultFile="./var/cache/"
>
<testsuites>
<testsuite name="Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true" cacheDirectory="./var/cache/">
<include>
<directory suffix=".php">./src</directory>
</include>
</coverage>
</phpunit>
mkdir tests
mkdir -p var/cache
touch var/cache/.gitkeep
.gitignore
les lignes suivantes (la première ligne est normalement déjà présente) :/vendor/
.phpunit.result.cache
!var/cache/.gitkeep
var/cache/*
vendor/bin/pest
Afin d'éviter à refaire à chaque fois toute cette configuration, j'ai créé un projet template pour PHP : https://github.com/klnjmm/template-php
git clone https://github.com/klnjmm/template-php.git
cd template-php
composer.json
les différentes informations générales (nom et description du projet)make init
make up
Voilà il ne vous reste plus qu'à coder !
Mon programme "S'entraîner pour progresser en PHP" est disponible. Il vous permettra de recevoir chaque semaine un kata de code directement dans votre boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives et des défis supplémentaires.