Utiliser le client Xdebug en ligne de commandes

Le déboguage d'une application écrite en PHP n'a longtemps rien eu d'évident : on multipliait les echo. Fort heureusement, il existe désormais une solution : Xdebug.
Dans un article précédent, il a été question de la manière de configurer Apache et PHPStorm pour déboguer dans cet IDE.
Or, il aussi possible d'utiliser Xdebug en dehors du contexte d'un IDE. Pour cela, il suffit d'utiliser le client Xdebug en ligne de commandes. A la limite, il est fort instructif de tenter de l'utiliser avant même d'utiliser Xdebug dans PHPStorm ou tout autre IDE, tant cela permet de mieux comprendre comment Xdebug peut fonctionner.
Continuer la lecture de "Utiliser le client Xdebug en ligne de commandes"
Utiliser le client Xdebug en ligne de commandes

Déboguer facilement un service Web en PHP et JavaScript

S'il vous en reste, le développement d'un service Web en JavaScript (côté client) et PHP (côté serveur) est une bonne occasion de vous arracher des cheveux. Le débogage est une opération délicate, quand vous ne pouvez pas vous appuyer sur un système tel que Xdebug.
C'est que dans une application Web traditionnelle, un appel de service consiste simplement à appeler un script PHP dont le contenu est retourné par le serveur. Dès lors, toute erreur survenant lors de l'exécution du service s'affiche nécessairement à l'écran.
Il en va tout autrement dans le cas d'une application Web moderne, de type Progressive Web Application. Ici, l'appel de service s'effectue par le truchement d'un objet XMLHttpRequest. Le résultat de l'exécution du script est toujours renvoyé par le serveur, mais il parvient au client via une des propriétés de cet objet.
Dans ces conditions, la callback fournie à l'objet XMLHttpRequest doit analyser ce résultat pour déterminer si une erreur ou non a été rencontrée, et si oui remonter au développeur toutes les informations utiles qu'il voyait s'afficher à l'écran dans le cas d'une application Web traditionnelle : chemin d'accès au script, ligne dans le script où l'erreur est survenue, description de l'erreur, voire plus.
Déboguer facilement un service en JavaScript et PHP
La première chose à faire avant de se lancer dans le développement d'un service Web consiste donc à mettre en place une système de remontée des résultats d'un appel de service efficace. On aurait tort de s'en passer, car il ne faut finalement guère de lignes de code.
Continuer la lecture de "Déboguer facilement un service Web en PHP et JavaScript"
Déboguer facilement un service Web en PHP et JavaScript

Les références en PHP sont-elles des pointeurs en C/C++ ?

Les références en PHP peuvent sembler assez déroutantes au développeur C/C++. S'agit-il de pointeurs ? La documentation de PHP prétend que non, mais la lecture des commentaires qui y ont été annexés laisse sur une impression bien moins catégorique.
En fait, tout dépend d'où l'on se place : veut-on chercher à comprendre comment les références fonctionnent, ou veut-on simplement déjà parvenir à décrypter le code où il en figure ?
Quelle que soit la manière dont les références fonctionnent réellement, ce qui sème le trouve dans l'esprit du développeur C/C++, c'est qu'il semble que ces références ne sont pas des pointeurs, du fait de la syntaxe.
En effet, soit le code C++ suivant :
int i, *p;
i = 0;
p = &i;
std::cout << *p;	// On écrit *p et non p (comme on a écrit i)
Le code équivalent en PHP serait :
$i = 0;
$p = &$i;
echo ($p);	// Surprise! on écrit $p comme on a écrit $i
Alors, comment le développeur C/C++ doit-il décrypter les références aux références dans le code PHP ? L'objet de cet article est d'éclairer sa lanterne. Plus généralement, tous ceux qui souhaitent utiliser des références en PHP devraient trouver un intérêt à le lire - tout particulièrement pour clarifier la relation critique entre référence et unset ().
Click here to read this article in english.
Continuer la lecture de "Les références en PHP sont-elles des pointeurs en C/C++ ?"
Les références en PHP sont-elles des pointeurs en C/C++ ?

Utiliser les espaces de noms en PHP

Les espaces de noms sont apparus avec PHP 5.3.0.
Comme dans tout langage moderne, on retrouve cette notion fondamentale puisqu'elle conduit à voir tout ce qui est déclaré non pas d'abord comme une instruction, une variable, un type, ou autre, mais comme quelque chose qui peut être adressé par un nom au sein d'une hiérarchie d'espaces de noms. Autrement dit, avant la déclaration de quelque chose, il y a la définition du nom par lequel on l'adresse. L'idée est de pouvoir éviter des collisions de noms entre factorisations sans avoir à recourir à des noms à rallonge (du fait de préfixes et/ou d'enchâssements).
Typiquement, plutôt que... :
const _Zoo_Birds_TGE = "The Great Eagle";
...pouvoir se contenter de... :
namespace Zoo\Birds;
const THE_GREAT_EAGLE = "The Great Eagle";
...pour pouvoir écrire :
echo (Zoo\Birds\THE_GREAT_EAGLE);
Comme toujours, le point de vigilance est que l'association entre la hiérarchie des fichiers et la hiérarchie des espaces de noms n'est qu'un cas particulier. Dans le cas de PHP, c'est encore plus clair qu'en Python ou en Java. En effet, il n'existe pas d'équivalent à import de Java ou de Python, qui ferait à la fois le travail de require () (inclusion du fichier et intégration des éventuels espaces de noms qui sont définis à l'arborescence des espaces de noms courante) et de use (création d'alias pour les espace de noms ainsi intégrés). D'ailleurs, PHP permet même de répartir le contenu d'un espace de noms entre plusieurs fichiers !
On peut contester l'utilité du concept. Dans un échange critique sur Stack Overflow, un contributeur prétend y voir une manifestation du culte du cargo en programmation. Intéressant, même si pour un anthropologue, cela peut sembler comme une réappropriation d'un concept assez douteuse - il vaudrait mieux parler de syndrome du singe savant, déjà évoqué ici.
Voyons voir dans le détail comment utiliser cette fonctionnalité...
Mise à jour du 14/03/2018 : Mention à ::class

Continuer la lecture de "Utiliser les espaces de noms en PHP"

Utiliser les espaces de noms en PHP

Comment marche la configuration dans PhpStorm 2017

Pour le développeur, PhpStorm 2017 présente l'intérêt d'être éminemment configurable. Les possibilités offertes touchent à tous les aspects ou presque de cet IDE, tout particulièrement l'interface utilisateur (UI) qui peut être très finement ajustée.
Configuration de la présentation du code PHP dans PhpStorm 2017.3
Pour autant, la manière de s'y prendre a de quoi dérouter. A tout instant, il est possible de modifier un paramètre via pas moins de trois moyens :
  • dans l'écran d'accueil, le bouton Configuration, puis Settings ;
  • dans l'éditeur d'un projet, le menu File, puis Settings ;
  • dans l'éditeur d'un projet, le menu File, puis Default Settings.
Et encore faut-il compter avec le fait que dans certains cas, un paramètre peut être modifié en spécifiant que la modification touche un "profil" ou un "schéma".
Le problème, c'est que PhpStorm n'offre pas de point d'entrée sur la configuration qui soit véritablement déterminé en fonction des besoins de l'utilisateur. Comment modifier un paramètre et répercuter cette modification sur un ensemble de projets ? Comment modifier un paramètre et que cela ne vaille que pour tous les projets à venir ? A l'utilisateur de deviner comment s'y prendre pour trouver les réponses à ces questions pourtant élémentaires.
Une exploration des possibilités offertes par PhpStorm 2017.3 permet toutefois de clarifier.
Click here to read this article in english.
Continuer la lecture de "Comment marche la configuration dans PhpStorm 2017"
Comment marche la configuration dans PhpStorm 2017

Configurer Xdebug pour déboguer dans PhpStorm 2017 / 2018

PhpStorm est un environnement de développement intégré (IDE) très populaire. Il le doit à ses fonctionnalités et à son ergonomie, ainsi qu'à son excellent rapport qualité / prix. En effet, il vous en coûtera moins de 90 € pour une licence perpétuelle avec mise à jour durant un an (vous pouvez aussi opter pour une formule de licence renouvelable automatiquement pour bénéficier de mises à jour au-delà de cette durée) et... beaucoup moins, voire rien du tout dans bien des cas : si vous êtes étudiant / enseignant, ou si vous travaillez sur un projet Open source.
Comme tout IDE, PhpStorm peut se révéler un peu déroutant pour le développeur qui le découvre, surtout si ce dernier n'a jamais beaucoup programmé de sa vie. En particulier, comment s'y prendre pour déboguer une application PHP, c'est-à-dire contrôler pas-à-pas l'exécution d'un script PHP initiée par une action de l'utilisateur sur l'interface utilisateur (UI) de l'application en question, c'est-à-dire une page Web ?
Pour y parvenir, il faut installer une extension de PHP, modifier le fichier de configuration de ce dernier, installer une extension dans Firefox. Et créer la configuration de débogage de PhpStorm, direz-vous ? C'est la bonne surprise : il n'y en pas ! Passage en revue de toutes les étapes à suivre pour y arriver.
Une session de débogage avec Xdebug dans PhpStorm
Mise à jour du 21/02/2019 : Explication d'une erreur commune No debug extension is loaded.
Continuer la lecture de "Configurer Xdebug pour déboguer dans PhpStorm 2017 / 2018"
Configurer Xdebug pour déboguer dans PhpStorm 2017 / 2018

Une installation minimale d’Apache 2.4, PHP 7.X et MySQL 8.0 sous Windows x64

Pour ceux qui préfèrent la jouer "roots", comment installer manuellement l'ensemble composé d'Apache, php et MySQL (et phpMyAdmin tant qu'on y est) sans passer par une distribution quelconque ?
Le quarteron de généraux... gagnants !
Mise à jour du 29/07/2019 : Prise en compte de MySQL 8.x plutôt que MySQL 5.7.
Continuer la lecture de "Une installation minimale d’Apache 2.4, PHP 7.X et MySQL 8.0 sous Windows x64"
Une installation minimale d’Apache 2.4, PHP 7.X et MySQL 8.0 sous Windows x64