Rasmus Lerdorf, PHP, Bricolage et CS-Script
2011-03-17Aujourd’hui, cours de PHP…
Sans même parler du langage en lui même, qui est du bricolage, ce qu’avoue même son créateur :
Sans même parler de ce langage donc, impossible de lui trouver un IDE valable en 2011 !
Bien sur, certains diront qu’on peut coder au notepad ou avec vim, mais je n’ai pas l’ambition d’apprendre tous les noms tordus des fonctions existantes…
On peut aussi payer des fortunes pour un truc qui n’arrive pas à la cheville d’un Visual Studio…
PHPDesigner est un des moins pire que j’ai testé : auto-complétion avec documentation correcte, pas mal d’erreurs détectées avant l’exécution, debugger dans le code, avec points d’arrêt, etc…
Mais impossible d’auto générer des propriétés automatiquement ! (les getters et setters)
Aucune option d’automatisation dans les menus, on a la possibilité de créer un snippet, mais je n’ai pas trouvé comment réutiliser à deux endroit différents une même valeur d’entrée. (si vous savez comment faire, faites moi signe)
Bref, plutôt que de me taper l’écriture du code à la main, (10 membres de classe, ça fait minimum 30 lignes de code)
j’ai fait un petit script en C#, ce qui m’amène à la partie intéressante de tout ça : CS-Script
CS-Script est un moteur de scripting, basé sur la plateforme .NET, et que j’utilise de temps en temps depuis un moment déjà.
Il permet de compiler et de lancer un script écrit en C# directement depuis l’explorer de Windows.
Étant donné que je sais programmer en C# et qu’il a un très bon IDE (lui), pourquoi apprendre un autre langage de script qui sera moins performant car interprété, probablement moins bien documenté, et surtout, que je ne connais pas, ce qui entraine forcément une perte de temps quand j’en ai le plus besoin.
Après installation et configuration, CS-Script est accessible en menu contextuel pour tout fichier *.cs.
Il permet d’exécuter simplement un programme console, mais est aussi capable de créer une interface en WinForms.
Bref, il remplace agréablement n’importe quel langage de script sous Windows 🙂
Pour en revenir à mon problème, résolu en 5 minutes, voici mon code pour ceux qui serait intéressés par mon générateur de propriétés PHP, ou par un exemple d’utilisation de CS-Script :
using System;
namespace PHPPropertiesGenerator
{
static class Program
{
[STAThread]
static void Main(string[] args)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
string[] a = GenerateAttributes(args);
string[] b = GenerateGetters(args);
string[] c = GenerateSetters(args);
for (int i = 0; i < args.Length; i++)
{
sb.AppendLine(a[i]);
sb.AppendLine(b[i]);
sb.AppendLine(c[i]);
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
public static string[] GenerateAttributes(string[] input)
{
string[] result = new string[input.Length];
for (int i = 0; i < input.Length; i++)
{
result[i] = string.Format("private ${0};", input[i]);
}
return result;
}
public static string[] GenerateGetters(string[] input)
{
string[] result = new string[input.Length];
for (int i = 0; i < input.Length; i++)
{
result[i] = string.Format("public function get{0}{1}() {{return $this->{2};}}", input[i].ToUpper()[0], input[i].Substring(1),input[i]);
}
return result;
}
public static string[] GenerateSetters(string[] input)
{
string[] result = new string[input.Length];
for (int i = 0; i < input.Length; i++)
{
result[i] = string.Format("public function set{0}{1}($value) {{$this->{2} = $value;}}", input[i].ToUpper()[0], input[i].Substring(1), input[i]);
}
return result;
}
}
}
exemple d’utilisation avec CS-Script, suivi de la sortie :
C:\>cscs Program.cs member1 member2 member3
C# Script execution engine. Version 2.7.4.0.
Copyright (C) 2004-2010 Oleg Shilo.
private $member1;
public function getMember1() {return $this->member1;}
public function setMember1($value) {$this->member1 = $value;}
private $member2;
public function getMember2() {return $this->member2;}
public function setMember2($value) {$this->member2 = $value;}
private $member3;
public function getMember3() {return $this->member3;}
public function setMember3($value) {$this->member3 = $value;}
(et pour ceux qui ont pensé à Eclipse pour générer les propriétés, comme en java : non, en PHP le menu n’existe pas…)
si vous avez une meilleure solution, n’hésitez pas à me le faire savoir 🙂
The comment is shown highlighted below in context.
JavaScript is required to see the comments. Sorry...