Le PHP est ce qu’on appelle un langage faiblement typé. Il permet au programmeur de ne pas se soucier du type de variables qu’il manipule (contrairement au Java et C# qui sont dits fortement typés). Si cela offre certaines facilités l’approche comporte toutefois certains pièges dont il vaut mieux être conscient.
Archives pour la catégorie Code
Chargement dynamique d’objets avec Unrealscript
Avant de m’intéresser au Java et au PHP, je programmais en Unrealscript. Il s’agit du langage utilisé par les moteurs de jeu Unreal et qui partage quelques similitudes avec d’autres langages tout en conservant quelques particularités. Celui-ci a connu plusieurs incarnations selon l’évolution du moteur.
Ici je vous montre du code en Unrealscript 1.0 retrouvé récemment qui permet à un programmeur de générer un objet à partir d’une classe et de l’attribuer à un joueur.
Ne rien modifier en cas de DUPLICATE KEY
Dans certains cas de figure on peut souhaiter d’insérer un record et n’effectuer aucun changement si les informations sont déjà présentes.
Un exemple concret est l’entretien d’une table d’adresses email erronnées qui peut être utile lorsqu’un hébergeur a pour politique de bloquer les envois pour éviter le spam.
Faire co-habiter jQuery et Mootools
Je me suis de nouveau ré-intéressé aux mécanismes qu’offre Ajax et cela m’a mené à tester quelques scripts utilisant des bibliothèques Javascript tel que jQuery et Mootools. Pour un projet j’ai récupéré deux scripts et c’est alors que je me suis rendu compte de la possibilité de conflit. On peut trouver quelques informations sur Google à ce propos.
Empêcher l’accès à une page request
L’Ajax permet notamment de récupérer des résultats à travers des pages request.
Si cela offre de chouettes possibilités comme avec la fonction autocomplete de jQuery, il est intéressant d’empêcher l’accès directe à une page request ne serais-ce que pour une question esthétique.
L’affichage en UTF8
Ceux qui ont été confrontés aux problèmes d’encodage de caractères peuvent confirmer que cela peut présenter un véritable casse-tête.
Ce fut le cas hier lorsque j’ai découvert qu’une nouvelle version d’un script imposait l’utilisation de l’utf8. Le résultat c’est que le symbole de l’euro s’affichait sous forme d’un diamant noir et les caractères accentués étaient également transposés sous forme d’autres caractères. Il fallait donc trouver une solution.
Transformer un ResultSet en ArrayList
La possibilité de transformer un ResultSet en ArrayList est particulièrement intéressante, surtout dans le contexte d’un DAO (Data Access Object) lorsqu’on souhaite récupérer une liste d’objets. Voici un exemple code source qui permet d’effectuer cette transformation.
Assainir une source HTML avec HTMLPurifier
Pour valider du texte riche (balises html) on m’a recommandé la bibliothèque HTMLPurifier. Première visite sur le site officiel et les promesses semblaient au rendez-vous. La nécessité d’avoir PHP5 n’était pas un souci car facilement changeable auprès de l’hébergeur via un .htaccess.
Ce fut alors que j’ai découvert qu’il y a très peu d’exemples pour s’inspirer et la documentation est assez lourde. J’ai donc passé une journée à essayer de comprendre comment cela fonctionnait avant d’aboutir au code suivant:
mysql_query et UPDATE
DJ Gilles m’a contacté aujourd’hui concernant ce code PHP:
print("Ok !"); // Résultat obtenu
}
else{
print("Wrong !"); // Résultat attendu
}
Tenir un journal d’erreurs
Voici un stacktrace qui peut paraître inhabituel aux premiers abords:
Caused by: java.lang.ClassNotFoundException: test.CSVTest
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Exception in thread "main"
Une première lecture de ce message mènerais à penser que Java n’arrive pas à trouver la classe qu’on vient de lancer avec un run. Après tout le ClassNotFoundException mentionne bien la classe en question. Mais cela n’a aucun sens.
Un deuxième réflexe serait de lancer « Project>Clean… ». Il est toujours possible que l’IDE a des soucis pour compiler toutes les classes et qu’un fichier class soit absent. Mais ce n’est pas non plus la solution.
Evidemment, les développeurs plus experimentés savent que ce genre d’Exception est le plus souvent lié à un package manquant. Ce qui fut bien le cas ici car j’avais supprimé spring.jar sans reconfigurer les bibliothèques dans les propriétés du projet.
Ce genre d’erreur peut prendre du temps à résoudre si on y est confronté pour la première fois. C’est pourquoi tenir un journal d’erreurs (voir modèle ci dessous) est une bonne idée lorsqu’on démarre avec un nouveau langage ou framework. Celui-ci vous évitera de rester bloqué sur des problèmes déjà rencontrés et de mieux avancer dans la réalisation de vos applications.
Date: 13/03/2011
Message d’erreur: java.lang.NoClassDefFoundError
Cause: JAR supprimé manuellement du dossier lib
Solution: Remettre le jar ou l’enlever du build path
– James Poulson.