Haxe/Générateur de code PHP

Introduction

Depuis la nouvelle version majeure de Haxe (2.0) une nouvelle cible a été ajoutée au compilateur : "PHP". Cela vous permet de créer vos applications avec Haxe et de les déployer dans l'environnement PHP.
Le code généré supporte entièrement la syntaxe Haxe sans exceptions connues. Vous pouvez regarder ici pour voir de quoi Haxe est capable.
Si vous êtes un développeur PHP, vous serez heureux de savoir que vous pouvez aisément créer des fonctions locales, des objets anonymes contenant des fonctions (pas uniquement des tableaux associatifs), utiliser les packages (Même si la version 5.3 de PHP supporte les namespaces nativement, nous devront attendre un certain temps avant qu'ils soient disponibles sur les hébergements mutualisés), passer des références de fonction en paramètre facilement et ainsi de suite ...
Le code PHP généré par Haxe est compatible avec PHP 5.1.6 ou supérieur (probablement n'importe quelle version 5.1.x fonctionne, mais cela n'a pas été testé).

Fichiers générés

Pour générer du PHP depuis le compilateur Haxe, vous devez ajouter la commande "-php". Cette commande accepte un paramètre unique "dir", c'est le répertoire de destination des fichiers générés.

La commande suivant crée le code PHP dans le répertoire "www", tenant compte du fait que vous avez une classe "Index"

haxe Index -php www

Dans le répertoire "www" vous trouverez un répertoire "lib". Ce répertoire contient les fichiers PHP générés. Un fichier est généré pour chaque type défini dans l'application ; le fichier porte le nom du type avec pour suffixe l'identifiant de type (".class", ".enum", ".interface") et l'extension ".php" standard. Un repertoire est généré pour chaque package et sous-package.
Même si votre classe "Index" est très simple (l'application classique "Hello world!" par exemple, telle qu'expliquée dans le tutorial "Premiers pas avec HaXe / PHP") vous remarquerez qu'il y a beaucoup de fichiers générés. Vous pouvez en ouvrir quelques uns pour voir l'aspect des fichiers générés. Vous remarquerez que le code est lisible. Si vous ouvrez un fichier dans un sous-répertoire (ei: haxe.Log) vous verrez que la classe "Log" a été transcrite par une classe PHP "haxe_Log". Le nom du package est toujours préfixé par le nom de type pour éviter les conflits.

Si vous ajoutez la commande "-main" avant les autres commandes, un nouveau fichier "index.php" sera généré dans le répertoire "www". Ce fichier contient uniquement une référence ("require_once") vers la classe php.Boot qui exécute des opérations de démarrage, et un appel de la méthode "main" dans la classe Index. Vous pouvez changer le nom du fichier "index.php" en rajoutant la commande "--php-front default.php" où "default.php" est le nouveau nom du fichier.

En explorant les fichiers générés dans le répertoire "lib", vous remarquerez qu'il n'y a ni "require" ni "require_once". Le code généré utilise l'option de chargement automatique de PHP SPL pour charger les fichiers requis. A chaque exécution, le processus de démarrage (contenu dans la classe "php.Boot") va scanner tout le contenu du répertoire "lib" à la recherche des types nécessaires, et les ajoutera à une hashtable qui sera utilisée par la fonction de chargement automatique. Pour éviter le processus de scan, vous pouvez créer un répertoire vide nommé "cache" dans le répertoire "www". Ce répertoire doit obligatoirement être accessible en écriture par le processus PHP. Lors du prochain accès au script, un fichier "haxe_autoload.php" est créé dans le répertoire "cache". A partir de ce moment, le répertoire "lib" ne sera plus scanné tant que vous ne supprimez pas manuellement le contenu du répertoire "cache". Afin d'éviter les erreurs du type "error: Class not found", il vaut mieux éviter de mettre en place le mécanisme de cache avant que l'application soit dans l'environnement de production.

Un troisième répertoire "res" est généré par le compilateur si une ou plusieurs ressources ont été ajoutées dans le processus de compilation.

version #4666, modified 2008-10-08 14:22:54 by djleop