Sébastien Caparros

Blog d'un développeur

Liste des articles

Qui suis-je ?

Déménagement du site

Vous avez peut-être remarqué que le site est resté inaccessible une dizaine de jours. J'ai en effet eu un souci avec la carte SD du Raspberry PI qui a lâchée. Ça tombe presque bien, car j'avais l'intention depuis quelque temps de revenir sur un hébergement "normal", c'est à dire pas chez moi.

C'est sympathique de l'héberger chez soi, mais ça pose aussi quelques contraintes et coups de stress au quotidien : quand il faut redémarrer sa box, couper le courant, déménager...

Je voulais néanmoins une solution simplissime étant donné le peu de visiteurs que j'ai. J'ai donc opté pour un site purement statique, qui est héberge sur GitHub Pages. L'avantage, c'est que même mon site est open source. L'inconvénient, c'est qu'il n'y a plus de commentaires possibles dans l'immédiat (et je ne souhaite pas adopter une solution extérieure comme Disqus). N'hésitez pas à me contacter par email malgré tout (le lien de contact est en bas de page).

Si vous êtes abonné aux RSS, pensez à mettre à jour le lien !

Une classe String en PHP ?

Je souhaitais depuis quelque temps avoir en PHP une API plus propre pour gérer les chaînes de caractères. Difficile en effet de nier que l'API native - bien que très complète - est très mal foutue (je ne sais pas ce que je ferais sans la doc ...) et difficile à utiliser de manière optimale :

J'ai donc créé une classe intitulée NiceString (le mot clé "String" n'est pas réservé par le langage, mais ça ne me semble pas très prudent non plus de l'utiliser) que je partage sur GitHub.

On y retrouve les méthodes classiques de ce genre de classe, que je vous laisse découvrir (je me suis beaucoup inspiré de Java), mais je me suis surtout amusé avec les différentes méthodes et classes magiques de PHP. J'insiste sur le côté expérimental, je l'ai fait surtout pour le fun, c'est très probablement lent, et c'est horrible et élégant à la fois.

Interface ArrayAccess

Cette interface permet de surcharger les éléments de syntaxe des tableaux. En l'occurence,  ça permet d'utiliser isset et d'accéder à un caractère par son index : 

$truc = new NiceString("Bonjour");
isset($truc[1]) // ==> true
isset($truc[10]) // ==> false
echo $truc[1] // ==> "o"

Interface Iterator

Rien de très tordu ici, on peut simplement faire un foreach pour boucler sur chaque caractère de la chaîne.

Méthode __invoke

Cette méthode permet de gérer le cas dans lequel on essaye d'appeler l'objet comme une fonction. Je l'ai utilisé pour pouvoir récupérer une partie d'une chaîne de caractères :

$hw = new NiceString("Hello World!");
echo $hw(4, 8); // ==> "o Wo"

Méthode __get

Probablement celle avec laquelle je me suis le plus amusé. On ne peut pas surcharger l'opérateur de concaténation en PHP (caractère "."). Mais j'ai trouvé un moyen détourné de concaténer en utilisant l'opérateur de pointage ("->").

Avant de vous montrer le résultat, je vais rappeler quelques points importants et méconnus du langage : 

$a = "Hello World!";
$b = "a";
$c = "b";
$d = "c";

echo $$$$d; // ==> "Hello World!"

J'ai donc utilisé la méthode __get pour retourner un autre objet NiceString, ce qui permet d'enchaîner avec des choses comme ça : 

$people = "World";
const MY_NAME = 'FooBar';
$age = 42;

$hello = new NiceString("Hello ");

echo $hello->$people->{", my name is "}->{MY_NAME}->{" and I'm "}->$age->{" years old.\n"};

(ce code affichera "Hello World, my name is FooBar and I'm 42 years old.")

OK, c'est horrible d'un point de vue sémantique et syntaxique, mais avouez que c'est astucieux :P ?

 

Je partage tout ça sous licence MIT, mais c'est très expérimental, utilisez le à vos risques et périls !

Partage de GlitchyVerse sur GitHub

Algorithme DiamondSquare

25 ans du Web

Deuxième vidéo de présentation de mon jeu

Publication d'une librairie JS : FileLoader.js

Petite vidéo de présentation du jeu

Un peu d'héritage en JavaScript

Déplacements totalement libres en WebGL

Publication sources du jeu multijoueurs

Joyeuses fêtes

Retour sur jMonkeyEngine

Expérimentation d'un moteur de particules

Le projet du moment

Démarrage du blog

Qui suis-je ?