À propos de cet aperçu

Ceci est un aperçu de mon livre Développer une Extension PHP, que vous pouvez acheter en version complète à l’adresse suivante :

https://leanpub.com/developper-une-extension-php

Ce livre est disponible aux formats électroniques PDF, EPUB et MOBI.

Qu’est-ce que contient cet aperçu ?

Cet aperçu reproduit quelques extraits du livre complet :

J’espère que ces quelques dizaines de pages vous donneront envie d’en lire plus, tout en vous permettant de vérifier que le livre complet répondra à vos attentes !

Contenu du livre ?

Le livre complet fait plus de 520 pages et regroupe des chapitres traitant des sujets suivants :

  • Création d’une première extension : il s’agit du premier chapitre du livre, qui est reproduit intégralement dans cet aperçu. 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 sous Linux 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ébogueur graphique.
  • Développer une extension PHP sous Windows : ce chapitre fait suite au précédent, en expliquant comment mettre en place un environnement de développement avec Visual Studio, sous Windows, en allant de la compilation de PHP jusqu’au débogage en interface 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.
  • Gestion de la mémoire : ce chapitre introduit le Zend Memory Manager, les fonctions d’allocation et de libération de mémoire, et présente comment travailler avec le TSRMLS.
  • 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.
  • Classes et objets : PHP 5 a apporté un véritable modèle objet. Ce sujet est couvert à travers deux chapitres :
    • Le premier montre comment créer des classes exposant constantes, propriétés et méthodes, comment travailler avec de l’héritage ou des interfaces et comment stocker des données complexes.
    • Le second explique comment travailler avec des espaces de noms et des traits, présente quelques interfaces communément manipulées et passe en revue les gestionnaires d’objets les plus utilisés.
  • Erreurs et Exceptions : PHP propose deux mécanismes de remontée d’imprévus à l’utilisateur : les erreurs, et les exceptions. Nous verrons ici comment tirer parti de ces deux principes, mais aussi comment transformer des erreurs internes en exceptions.
  • 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 !
  • Travailler avec des flux : ce chapitre montre comment utiliser le mécanisme de flux de PHP, en lecture et en écriture. Il enchaîne ensuite avec la mise en place d’un gestionnaire de flux, avant de passer à la notion de contexte de flux et au développement d’un filtre de flux.
  • Les ressources : nous verrons ici ce qu’est le type ressource et comment déclarer et manipuler des ressources, qu’elles soient ou non persistantes.
  • Configuration plus avancée de la compilation et du chargement de l’extension : ce chapitre vous présentera comment mettre en place des dépendances entre extensions, comment utiliser une bibliothèque partagée externe, ou encore comment compiler votre extension de manière statique, intégrée à PHP.
  • 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, la personnalisation de phpinfo(), ou encore l’exécution de code PHP et l’utilisation de fonctions de rappel depuis une extension.
  • Les Extensions Zend : ce chapitre, rédigé par Julien Pauli, montre de quelles possibilités dispose une extension Zend et comment en mettre en place – ainsi qu’un exemple d’une extension qui soit à la fois une extension PHP traditionnelle et une extension Zend.
  • Un œil dans la Zend Virtual Machine : ce chapitre, rédigé par Julien Pauli, constitue une introduction au fonctionnement de la machine virtuelle de PHP et montre comment une extension ou une zend_extension peuvent jouer avec celui-ci.

Pour ce qui est des annexes, j’en ai mis une en place :

  • Normes de codage et bonnes pratiques PECL : cette annexe reprend une partie des normes de codage de PHP et une série de bonnes pratiques issues de revues effectuées par l’équipe de PECL sur un nombre important d’extensions, traduites en français, filtrées et reformulées, et parfois accompagnées d’exemples supplémentaires.

La version publiée du livre sera bien sûr mise à jour, gratuitement, en cas d’éventuelles corrections.

Notez aussi que, aujourd’hui, aucune des plus de 75 extensions PHP écrites pour rédiger ce livre ne sont rendues publiques. Je n’ai pas encore vraiment réfléchi à l’idée, mais j’aimerais, à terme, publier au moins une partie d’entre-elles : cela constituerait un bon accompagnement aux différents chapitres. Cela dit, j’ai du travail à faire pour les rendre réellement présentables (ne serait-ce que pour les documenter et commenter leur code), et ce n’est donc pas pour tout de suite. Mais je garde l’idée à l’esprit !