Un livre à propos du développement d'extensions PHP ? Work In Progress !

21 octobre 2013extension, livre, php
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

Depuis quelques années, j’ai occasionnellement l’occasion de discuter du sujet du développement d’extensions PHP avec des collègues ou d’autres développeurs (lors d’aperos, de conférences, …), et il ressort souvent de la discussion que le sujet est intéressant, que certains d’entre nous ont envie d’essayer, ne serait-ce que pour le plaisir et par curiosité, mais que l’idée semble effrayante et qu’il y a comme un manque de documentation.

En parallèle, je crois que la première fois où j’ai développé une extension était lors d’une demi-journée organisée par l’AFUP Paris en 2011, où le sujet avait été présenté par Julien Pauli et Patrick Allaert1, sous forme d’une rapide introduction théorique suivie par une après-midi de pratique – et j’avais trouvé ça plutôt sympa.

Depuis, je n’hésite plus à aller fouiller de temps en temps dans le code de PHP2, et je me suis rendu compte que, même si je n’avais pas réellement codé en C depuis une petite dizaine d’années3, j’arrivais globalement à comprendre ce qu’il se passe4… Et avec le temps qui passe, ça a de plus en plus titillé ma curiosité ^^


J’ai donc fini par m’y mettre de plus en plus, en commençant par le classique « Hello World! » et en avançant petit à petit, tout en me disant qu’il pourrait être intéressant de prendre quelques notes, et de les partager – ce qui me donne aussi une raison de fouiller plus que je n’en ai parfois besoin sur le coup, rendant l’exercice encore plus enrichissant pour moi.

Résultat, j’ai commencé à écrire ce qui est en train de devenir un livre électronique, en français, à propos du développement d’Extensions PHP : en l’état actuel, 10 chapitres sont rédigés (ils représentent 225+ pages, soit 50,000+ mots), et 5 chapitres supplémentaires sont prévus mais pas encore commencés.

Ce livre sera distribué (en PDF/EPUB/MOBI) par le biais du site Leanpub, et en suivant la logique du Manifesto correspondant5, je le publierai alors qu’il ne sera pas encore achevé, et le mettrai ensuite à jour au fur et à mesure de l’écriture des évolutions et chapitres suivants, et/ou des corrections éventuelles.


En attendant cette publication prochaine, vous pouvez dès maintenant signaler votre intérêt et demander à être prévenu lors de la publication du livre : Développer une Extension PHP.


Voici quelques informations sur les sujets couverts par les chapitres déjà rédigés, qui devraient vous permettre de faire vos premiers pas dans le développement d’extensions PHP :

  • Création d’une première extension : il s’agit du premier chapitre du livre, qui est reproduit intégralement dans l’aperçu disponible au téléchargement. J’y explique comment créer le squelette d’une première extension, quels fichiers sources sont requis, et quelles structures de données et déclarations sont nécessaires.
  • Environnement de développement : ce chapitre montre comment compiler une version de PHP orientée développement d’extensions et quelles sont les informations qu’elle nous apporte. J’en ai profité pour présenter comment configurer Eclipse CDT pour obtenir un environnement de développement avec débugger graphique.
  • Écrire une fonction : les fonctions sont au cœur de PHP et de ses extensions. Nous verrons ici, entre autres, comment recevoir des paramètres et retourner une valeur. Ce sujet est abordé au travers de deux chapitres, le second intégrant des concepts supplémentaires, comme la réception de zval en paramètres, les fonctions attendant un nombre d’arguments variable, ou encore le type-hinting.
  • zval : les variables de PHP : les variables de PHP sont représentées, en interne, par une structure nommée zval. Ce chapitre nous montrera comment en créer, les lire et les manipuler.
  • HashTable et tableaux : la structure HashTable est utilisée par PHP pour stocker un ensemble de données, comme un tableau. Elle est tellement importante pour PHP qu’elle est fréquemment utilisée en interne, et que de nombreuses fonctions permettent de la manipuler.
  • Configuration par fichier .ini : le fichier php.ini représente, pour PHP et pour ses extensions, le standard de configuration permettant aux utilisateurs d’influencer sur leur comportement. Ce chapitre présentera comment exploiter au mieux cette possibilité de paramètrage.
  • Tests automatisés : vous n’envisageriez pas de développer une extension sans tests automatisés ? Moi non plus !
  • Quelques points divers : ce chapitre regroupe quelques points intéressants, mais qui ne méritaient pas à un chapitre à eux seuls, comme la déclaration de variables super-globales, de constantes, ou la personnalisation de phpinfo(). Ce chapitre est lui aussi reproduit intégralement dans l’aperçu disponible au téléchargement.

J’ai prévu d’aborder d’autres sujets, pour lesquels je n’ai pas encore commencé la rédaction.
Je pense en particulier aux points suivants :

  • Classes et objets
  • Travailler avec les flux
  • Développer une extension PHP sous Windows
  • Les ressources
  • Gestion de la mémoire

Une fois le livre publié, il sera mis à jour au fur et à mesure de la rédaction, entre autres, de ces chapitres – l’ordre dans lequel ils figurent ici n’étant en rien indicatif de leur ordre de rédaction.

Pour vous donner une idée de la vitesse à laquelle j’écris : j’ai commencé à réfléchir à ce projet il y a plus d’un an, mais je n’ai commencé à écrire qu’en février 2013, ce qui représente en gros une moyenne d’un chapitre par mois. Cela dit, j’écris à une allure variable, puisque j’ai fait une quasi-pause de plusieurs mois à un moment, alors que j’ai écrit un chapitre en une semaine et deux week-ends à un autre moment ; et sur les 245 jours écoulés depuis la création du repository hébergeant ce projet, j’ai été actif 80 jours (soit 32.7% du temps).


Pour les curieux, l'extension d'exemple utilisée pour cette demi-journée est disponible sur le github de Patrick : [PHP_Extension_Workshop](https://github.com/patrickallaert/PHP_Extension_Workshop).
L'[instance OpenGrok](http://lxr.php.net/) de PHP est extrêment pratique, lorsque l'on veut naviguer dans son code source pour essayer de comprendre pourquoi une fonctionnalité se comporte comme elle le fait !
J'ai véritablement découvert la programmation alors que j'étais au Lycée, en codant pour TI-92+, pour laquelle il était possible de développer en C avec GCC ; par la suite, j'en ai fait un peu pendant mon DUT, j'ai basculé sur d'autres langages pendant ma licence et mon master *(j'ai notamment de forts bons souvenirs de soirées / week-end passés à coder en Perl ^^)*, et je n'ai pas eu l'occasion d'y retoucher depuis que je bosse -- dans le web, on ne fait pas du C tous les jours...
J'avoue généralement regarder comment sont implémentées des fonctions / classes, et ne pas encore m'être plongé dans le moteur de PHP en lui-même ; peut-être un jour prochain ;-)

``` Par rapport à ce manifesto, j’ai même probablement attendu trop longtemps avant de me préparer à la publication, puisque j’ai rédigé entre la moitié et les deux tiers de ce que je prévoyais ! Mais je souhaitais que ce livre soit exploitable dès sa publication, sans que mes lecteurs ne soient complètement bloqués par l’absence de chapitres clefs.