JeuWeb - Crée ton jeu par navigateur
[Framework] PHPRedesign - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Framework] PHPRedesign (/showthread.php?tid=5818)

Pages : 1 2 3 4


[Framework] PHPRedesign - qwarnant - 21-11-2011

Bonjour/bonsoir à tous,

Je viens vous présenter un framework en cours de développement par moi-même, que j'ai nommé PHPRedesign.

Introduction
PHP est pour moi ma passion, j'en fais tous les jours pour mes loisirs depuis maintenant 6 ans. Avec le temps, j'ai pu explorer le langage en partie (il est trop important pour tout explorer!) et j'y ai connu ses nombreux avantages, mais aussi ses inconvénients, car tout n'est rose dans quelque langage de développement que ce soit.

Composition du framework
J'ai donc dressé une liste de ces avantages et inconvénients que j'ai comparé au second langage que je pratique le plus, le Java, dit orienté objet. Après des études, j'ai remarqué que les plus gros inconvénients du PHP pour moi était le manque de rigueur en certains points comme par exemple l'inexistence du typage (int, ...) dans les déclarations de variables et autres. On peut parfois se retrouver avec une variable ayant un type tout à fait différent de celui de base.
Certains vont dire que c'est une des forces du langage, mais personnellement je trouve que c'est une lacune de ne pouvoir garder le contrôle de ses variables.
C'est donc sur ce premier point que j'ai basé mon framework en gérant les IllegalArgumentException (type mismatch ...)
Le second point, c'est le peu d'avancement de PHP pour des concepts orientés objets comme les Collections, les Maps, les Exceptions, ... J'ai donc tenté d'implémenter dans les limites du PHP toutes ces structures de données présentes en Java pour le PHP, car elles sont pour moi fortes utiles. J'ai combiné les avantages de PHP pour les tableaux, fournissant une classe de tableau permettant de contrôler son tableau, tout en le gardant associatif on indexé.
Ensuite, j'ai travaillé le concept de "package" même si PHP ne gère pas ce point. Dans mon framework, un package est un dossier regroupant des classes ayant un but commun. La fonction import (comme en Java) importe un package en prenant le nom du folder.

Suite de l'aventure
Je compte développer, un à un, les concepts orientés objets présents dans le Java et d'autres langages et qui ne sont hélas pas présents dans le PHP.
Mon but n'est pas de priver le langage de PHP de ses avantages, mais de combler ses lacunes et de compléter des concepts ou d'en rajouter.
Lorsque mon framework sera bien avancé, je le mettrai à disposition de ceux que ça intéresse, j'espère qu'il y en aura !

Preview
[Image: 1136572491.png]


RE: [Framework] PHPRedesign - sharyma - 21-11-2011

voilà un projet intéressant et fort ambitieux : j'aime !
n'hésite pas à nous tenir au courant de tes avancées, en espérant que tu ne te lasses pas en cours de route (car ça risque de te prendre pas mal de temps à développer tout ça Tongue )


RE: [Framework] PHPRedesign - niahoo - 22-11-2011

Bon courage !

Essaie d'arriver rapidement à une version exploitable afin de pouvoir te servir de ton Framework pour en déceler les défauts et aussi pour garder la motivation à le développer.


RE: [Framework] PHPRedesign - qwarnant - 22-11-2011

Merci,

Les seuls problèmes que je rencontre pour le moment sont les limites du langage PHP.

Par exemple, normalement Collection est une interface mais comme je dois contrôler le type des arguments passé aux méthodes, je suis obligé d'en faire une classe normale.
Je laisse cependant le choix à l'utilisateur de la structure de données qu'il veut utiliser pour la Collection. (une structure qui doit être préalablement développée par moi) J'ai aussi recréé le concept de generics, sauf qu'ici on ne peut le mettre en haut dans le nom de la classe, il est donc passé en argument dans le constructeur.

Cordialement


RE: [Framework] PHPRedesign - srm - 22-11-2011

Et si tu donnais des exemples d'utilisation de ce dernier ?


RE: [Framework] PHPRedesign - qwarnant - 22-11-2011

Exemple pour les types de base :

Code PHP :
<?php 
$int1
= new Int(10);
echo
$int1; //affiche 10
$int1->intValue(); //récupère le valeur entière
$int2 = new Int(8);
var_dump($int1->compareTo($int2) > 0); //affiche true compareTo est une méthode de l'interface Comparable

$TArray = new TArray(new String("String"), new Int(10));
//Crée un tableau de String de taille physique 10
$it = $TArray->iterator(); //Itérateur sur un tableau (plus de for...)
while($it->valid()) {
echo
$it->current(); //Affiche la string courante
$it->next();
}

$Structure = new TArray(new String("Int"), new Int(10));
$collection = new Collection(new String("Int"), $Structure);
//Crée une collection avec une structure de données, avec un tableau dans ce cas ci.
//Le premier paramètre est le generic
?>

Ce n'est qu'un bref aperçu de tout le travail que j'ai déjà fait, vous pourrez mieux tester une fois que je mettrai le framework à disposition. :bave:


RE: [Framework] PHPRedesign - srm - 22-11-2011

Donc en fait l'utilité c'est pour pouvoir faire :
function(Int $a, String $b) c'est ça ?

Ca va tout de même apporter beaucoup de lourdeur au code, ne vaut-il pas mieux utiliser un langage du genre Scala ?
Et sinon tu devrais écrire ce passage ainsi :

foreach($TArray as $value) {
echo $value,
}



RE: [Framework] PHPRedesign - niahoo - 22-11-2011

Yep ça risque de mouliner un peu. Faut voir si ça apporte vraiment des avantages conséquents.


RE: [Framework] PHPRedesign - srm - 22-11-2011

C'est en gros rajouter une surcouche à tout l'ensemble des types de base pour avoir un truc plus propre et plus "langage typé", c'est un travail "intéressant" mais au final pas trop utile en réel, tu ne pourras que toucher de loin la force d'un langage typé.


RE: [Framework] PHPRedesign - qwarnant - 22-11-2011

Bonjour,


Ca alourdit en effet légèrement la façon de développer mais elle permet une plus grande rigueur et une plus grande maîtrise de ce qu'on fait.
Si on essaye de mettre un objet non prévu pour une fonction, il y aura une ClassCastException lancée ou un IllegalArgumentException.

Le but, en plus de la gestion des types de base est de fournir des interfaces, classes utiles comme Collection, Hashmap, ... qui ne sont pas implémentées en PHP et que je trouve forte utiles en Java.

Preview avec mon travail de cette nuit/ce matin
[Image: 1136634589.png]