Faire une "belle" programmation en PHP

Faire une "belle" programmation en PHP - PHP - Programmation

Marsh Posté le 04-06-2006 à 18:38:08    

J'ai commencé le PHP comme beaucoup de monde grâce à des sites sur PHPdebutants, ou des sites du genre...
Ensuite, j'ai vu ça dans le cadre de mes études...
La notation qu'utilisent les 2 systèmes n'est pas la même, mais je trouve que le PHP est "laid"...
Pardonnez moi l'expression, par rapport à du C, du JAVA, du LISP, ou plein d'autres langages, je ne lui trouve pas de "belle" construction.
J'ai redécouvert récemment la manière de programmer en SQL, ça a changé beaucoup de choses...
 
Est-ce que vous connaissez des sites qui approfondiraient plus le PHP ?
Afin d'allouer - de désallouer certaines tailles mémoires, d'utiliser des pointeurs, bref.... de "bien" programmer :)
 
 
Merci !
 :bounce:

Reply

Marsh Posté le 04-06-2006 à 18:38:08   

Reply

Marsh Posté le 04-06-2006 à 18:49:45    

un langage qui permet ceci

Citation :


$caca="prout";
$caca += 1;


n'est pas un langage qui permet de "bien" programmer :o
si tu veux faire de la "bonne" programmation web, alors tourne toi vers C#/ASP


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 04-06-2006 à 19:04:21    

j'ai decouvert l'asp 2.0 + C# recemment et franchement je pleure quand je vois tout le temps que j'ai perdu avec PHP a essayer de faire des trucs propres a coup de MVC etc... :p
 
Surtout qu'avec le mod mono tu peux avoir l'hebergement pour pas trop cher.
 
PHP => quick & dirty, faire du propre c'est possible mais c'est pas fait pour ça! :D

Reply

Marsh Posté le 04-06-2006 à 19:09:07    

Harkonnen a écrit :

si tu veux faire de la "bonne" programmation web, alors tourne toi vers C#/ASP


Beurk :o
 
Mieux vaut faire du Ruby ou du Python :o
 
En plus c'est complètement cross platform sans limitations dues à des implémentations partielles :o

Reply

Marsh Posté le 04-06-2006 à 23:16:05    

Harkonnen a écrit :

un langage qui permet ceci

Citation :


$caca="prout";
$caca += 1;


C'est pas parce que c'est possible qu'il faut le faire. :o
 
Pour répondre au sujet du topic http://classes.scriptsphp.net/ est très enrichissant (et en français !).

Reply

Marsh Posté le 04-06-2006 à 23:28:37    

kalex a écrit :

C'est pas parce que c'est possible qu'il faut le faire. :o


Ouais enfin un langage qui permet des insanités pareilles sur des trucs aussi basiques on ne peut qu'avoir peur de ses réactions imprévisibles sur des trucs plus complexes :o

Reply

Marsh Posté le 04-06-2006 à 23:42:38    

D'ailleurs je me demande depuis un moment qu'elle en est la raison?
J'veux dire, comment se fait-il qu'on en soit arriver à un langage qui permet de pareilles choses?
 
Raisons historiques? Techniques? Autres?

Reply

Marsh Posté le 04-06-2006 à 23:50:36    

dwogsi a écrit :

D'ailleurs je me demande depuis un moment qu'elle en est la raison?
J'veux dire, comment se fait-il qu'on en soit arriver à un langage qui permet de pareilles choses?
 
Raisons historiques? Techniques? Autres?


Ca provient du caractère non typé des variables PHP, c'est un choix fait depuis le départ.
 
edit : Enfin, j'ai parlé un peu vite, c'est plutôt des variables très faiblement typées, car les variables PHP ont bien un type qu'il importe de vérifier dans beaucoup de cas.


Message édité par kalex le 04-06-2006 à 23:55:32
Reply

Marsh Posté le 04-06-2006 à 23:53:11    

Pourtant la syntaxe est bien inspirée du C? Ya eu un manque de logique ou pas assez d'inspiration du C à mon sens.

Reply

Marsh Posté le 04-06-2006 à 23:58:24    

PHP est surtout inspiré de Perl (PHP-FI), lui-même inspiré du C.

Reply

Marsh Posté le 04-06-2006 à 23:58:24   

Reply

Marsh Posté le 05-06-2006 à 00:02:25    

syntaxe c-style, ca veut pas dire que le langage doit etre une copie du C, ni meme inspiré. PHP est interpreté et (tres faiblement) typé dynamiquement, il permet de faire du code "quick and dirty"

Reply

Marsh Posté le 05-06-2006 à 00:10:50    

Oui oui bien entendu, je ne dis pas qu'il doit être une copie du C, je dis juste qu'ils auraient peut être pu reprendre les bases de certains langages, a savoir la syntaxe et peut être un meilleur typage.
 
Parce que je trouve que sont plus grand problème c'est de donner la possibilité de faire du code "quick and dirty", ça l'ouvre peut être à un plus large publique mais ce n'est peut être pas une bonne chose pour autant.

Reply

Marsh Posté le 05-06-2006 à 00:21:28    

ca c'est que question de philosophie du langage, et php semble evoluer dans se sens (tout en assurant la retro-compatibilite ?)
et puis php n'a pas le monopole dans son domaine de predilection, tu peux faire un cgi en C ou en Java si tu preferes

Reply

Marsh Posté le 05-06-2006 à 00:25:35    

Je pense que si l'on reste conscient de ce que l'on manipule, l'absence de typage fort de PHP n'est pas un problème. Il impose juste quelques vérifications supplémentaires.

Reply

Marsh Posté le 05-06-2006 à 00:30:19    

dwogsi a écrit :

Oui oui bien entendu, je ne dis pas qu'il doit être une copie du C, je dis juste qu'ils auraient peut être pu reprendre les bases de certains langages, a savoir la syntaxe et peut être un meilleur typage.


Vu que le C n'est pas typé on peut dire qu'ils ont repris les bases du C [:ddr555]

Reply

Marsh Posté le 05-06-2006 à 08:59:05    

kalex a écrit :

Je pense que si l'on reste conscient de ce que l'on manipule, l'absence de typage fort de PHP n'est pas un problème. Il impose juste quelques vérifications supplémentaires.


 
+1
 

Reply

Marsh Posté le 05-06-2006 à 14:19:53    

D'après tout ce que je lis ci-dessus, alors, je n'ai pas l'impression de mal coder en PHP, PHP est construit comme ceci et c'est tout...
Etes vous sûrs qu'on ne peut pas typer ses variables, ni allouer / désallouer un certain espace mémoire, et bosser sur des pointeurs ?
 
Merci pour toutes vos réponses, c cool :)

Reply

Marsh Posté le 05-06-2006 à 14:24:08    

ForgetTheNorm a écrit :

Etes vous sûrs qu'on ne peut pas typer ses variables


oui, d'autant moins si tu parles de typage explicite à la java.

ForgetTheNorm a écrit :

ni allouer / désallouer un certain espace mémoire, et bosser sur des pointeurs ?


Ca, ce sont pas des moyens de coder proprement, ce sont des moyens de se tirer dans le pied [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-06-2006 à 14:30:45    

masklinn a écrit :

oui, d'autant moins si tu parles de typage explicite à la java.
 
Ca, ce sont pas des moyens de coder proprement, ce sont des moyens de se tirer dans le pied [:pingouino]


 
Bof, je ne suis pas d'accord avec toi... C'est extrêmement pratique pour beaucoup de choses, et j'ai l'impression que les personnes qui ne s'interessent pas assez au sujet ou qui n'ont pas pour priorité d'avoir un code le plus pratique et puissant codé sont rebutées par tout ce qui est pointeur ou allocation de mémoire... D'où l'utilisation de JAVA ou autres qui sont plus lourds en traitement mais dont la machine virtuelle s'occupe de les gérer toute seule.

Reply

Marsh Posté le 05-06-2006 à 14:37:04    

ForgetTheNorm a écrit :

C'est extrêmement pratique pour beaucoup de choses


Des exemples? La seule chose pour laquelle l'allocation manuelle est pratique c'est créer des memory leaks ou des buffer overflow, à part dans des environnements à très fortes contraintes de perfs/empreinte mémoire les systèmes à allocation automatique & GC sont infiniment plus fiables et moins dangereux.
 
En bonus, quand les GC sont bien optimisés (aussi bien sur l'allocation que sur la désallocation) il a été prouvé qu'ils sont globalement plus rapides que l'allocation manuelle générique [:pingouino] (allocation manuelle générique = quand on ne se fait pas des allocateurs custom)

ForgetTheNorm a écrit :

et j'ai l'impression que les personnes qui ne s'interessent pas assez au sujet ou qui n'ont pas pour priorité d'avoir un code le plus pratique et puissant codé sont rebutées par tout ce qui est pointeur ou allocation de mémoire...


Un code plus pratique?
Un code plus puissant?
C'est une blague?

ForgetTheNorm a écrit :

D'où l'utilisation de JAVA ou autres qui sont plus lourds en traitement mais dont la machine virtuelle s'occupe de les gérer toute seule.


Lisp, Haskell, OCaml ou SML utilisent également un système basé sur un GC, et j'dois dire que les traiter de lourds j'avais encore jamais vu [:pingouino]
 
Faudrait éviter de confondre le fait que Java utilise une VM et un JIT avec le fait qu'il utilise un garbage collector hein, ce sont deux choses complètement séparées et le fait d'en utiliser un n'impose aucunement le fait d'utiliser le second (flash news: il y a des GC pour le C++)

Message cité 1 fois
Message édité par masklinn le 05-06-2006 à 14:37:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-06-2006 à 14:44:58    

Harkonnen a écrit :

un langage qui permet ceci

Citation :


$caca="prout";
$caca += 1;


n'est pas un langage qui permet de "bien" programmer :o
si tu veux faire de la "bonne" programmation web, alors tourne toi vers C#/ASP


 
On peut faire moultement pire en python, c'est pas assez représentatif :o
 

masklinn a écrit :


Lisp, Haskell, OCaml ou SML utilisent également un système basé sur un GC, et j'dois dire que les traiter de lourds j'avais encore jamais vu [:pingouino]


 
Lisp est certe conceptuellement simple, mais à l'utilisation il est franchement lourdingue pour la plupart des applications. (par contre il a ses domaines ou il excelle certes, mais c'est assez segmenté ...)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 14:49:03    

ForgetTheNorm a écrit :

D'après tout ce que je lis ci-dessus, alors, je n'ai pas l'impression de mal coder en PHP, PHP est construit comme ceci et c'est tout...
Etes vous sûrs qu'on ne peut pas typer ses variables, ni allouer / désallouer un certain espace mémoire, et bosser sur des pointeurs ?
 
Merci pour toutes vos réponses, c cool :)

Pour forcer le typage d'une variable, tu peux utiliser ce type de mécanisme :

$var = (float) 3;

$var est alors de type float et non int.
 
Pour vérifier un type de variable, il existe les fonctions is_int, is_float, is_string, etc. Ca peut aussi se faire avec les opérateurs de comparaison. Par exemple, en utilisant === au lien de ==, tu compares la valeur ET le type des variables.
 
Ensuite, tu peux utiliser les références (& ) pour optimiser la mémoire.

Reply

Marsh Posté le 05-06-2006 à 14:49:30    

J'utilise tous les langages de programmation (enfin, tous...) dans un cade bien précis de mon travail qui traite de calcul de démonstration automatique, et qui va donc gérer des centaines de variables propositionnelles, qu'il va falloir allouer et désallouer, bouger de tableaux en tableaux, créer des listes, des piles, des liste chainées... Bref un beau bordel où ne pas avoir les pointeurs revient à être obligé de retenir dans des tableaux l'ensemble des variables...
J'ai déjà essayé et c'est horrible à programmer et horrible en gestion de mémoire.
 
Vous avez surement raison qu'en général les GC sont peut-être plus pratiques, mais moi je me cantonne à l'utilisation dans un cas très précis, et pour ça le JAVA ça va 5 min pour faire des interfaces graphiques ou pour voir un petit peu la notion d'objet, mais pas trop non plus....
Voilà pourquoi ma préférence envers le C et ses alloc/désalloc de mémoire :)

Reply

Marsh Posté le 05-06-2006 à 14:53:34    

Quand t'es habitué aux malloc/free de C, tu peut commencer avec un GC par comptage de références. Tu le fais toi même en restant en C, comme ca, ca ne t'es pas trop étranger, et tu te rends vide compte du confort que ca apporte ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 15:06:34    

masklinn a écrit :

Vu que le C n'est pas typé on peut dire qu'ils ont repris les bases du C [:ddr555]


 
le C n'est pas typé, c'est nouveau ca ?

Reply

Marsh Posté le 05-06-2006 à 15:12:53    

skelter a écrit :

le C n'est pas typé, c'est nouveau ca ?


 
c'est très discuté/discutable, ca dépends ce que tu recherche dans le typage ou ce que tu veut signifier [:spamafote]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 15:13:07    

Pourquoi veux tu à tout pris allouer désallouer la mémoire ?  :??:
 
Edit : J'avais pas raffraichi la page avant de poster  :o


Message édité par archangel le 05-06-2006 à 15:14:38

---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
Reply

Marsh Posté le 05-06-2006 à 15:16:39    

0x90 a écrit :

c'est très discuté/discutable, ca dépends ce que tu recherche dans le typage ou ce que tu veut signifier [:spamafote]


 
le C est typé statiquement, ca c'est un fait, ce qui est discutable c'est de dire que le typage est faible ou fort vu que le langage est permissif sur certain point et rigide sur d'autre

Reply

Marsh Posté le 05-06-2006 à 15:18:55    

Citation :

(flash news: il y a des GC pour le C++)


 
je ne suis pas sur que le C++ ai reellement besoin de gc

Reply

Marsh Posté le 05-06-2006 à 15:22:36    

skelter a écrit :

Citation :

(flash news: il y a des GC pour le C++)


 
je ne suis pas sur que le C++ ai reellement besoin de gc


 
C'est pas tant le langage qui a besoin d'un gc ou non, mais plutot le projet qui utilise le langage, enfin il me semble [:spamafote]
 
( evidement à jamais _vraiment_ besoin de quoique ce soit, c'est une question de confort )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 15:25:49    

oui, mais on peu programmer confortablement en C++ sans gc et sans se faire chier avec l'allocation memoire, par exemple avec les 'smart pointer' et meme les 'pointer contener' de boost
 
edit: extrait de la faq de Stroustrup
 

Citation :

Also, C++ supports programming techniques that allows memory management to be safe and implicit without a garbage collector.

Message cité 1 fois
Message édité par skelter le 05-06-2006 à 15:28:47
Reply

Marsh Posté le 05-06-2006 à 15:39:04    

0x90 a écrit :

On peut faire moultement pire en python, c'est pas assez représentatif :o


Heuu non [:pingouino]
 
Ou alors j'veux un exemple de "moultement pire" [:pingouino]

0x90 a écrit :

Lisp est certe conceptuellement simple, mais à l'utilisation il est franchement lourdingue pour la plupart des applications. (par contre il a ses domaines ou il excelle certes, mais c'est assez segmenté ...)


[:petrus dei]
 
Je parlais de la lourdeur des applis hein, et il existe des compilateurs pour Lisp, haskell ou les ML quand à eux sont principalement utilisés sous forme compilée

skelter a écrit :

Citation :

(flash news: il y a des GC pour le C++)


 
je ne suis pas sur que le C++ ai reellement besoin de gc


J'pense qu'on s'en fout hein, d'autres ont décidé qu'ils voulaient des GC en C++ et les ont implémenté, c'est tout, si t'en veux pas tu les utilises pas [:spamafote]  

skelter a écrit :

oui, mais on peu programmer confortablement en C++ sans gc et sans se faire chier avec l'allocation memoire, par exemple avec les 'smart pointer' et meme les 'pointer contener' de boost


http://en.wikipedia.org/wiki/Smart_pointers
 
Les smart pointers c'est une forme de garbage collection automatique :whistle:  

skelter a écrit :

edit: extrait de la faq de Stroustrup
 

Citation :

Also, C++ supports programming techniques that allows memory management to be safe and implicit without a garbage collector.



Ouais grâce à ça les applis C++ n'ont jamais de memleaks... oh wait [:totoz]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-06-2006 à 15:44:02    

masklinn a écrit :


Ouais grâce à ça les applis C++ n'ont jamais de memleaks... oh wait [:totoz]


 
moi j'aimerais bien voir le code de ces applis  :), serieusement tu as un exemple de code ecrit en C++ 'safe' et raisonnable (pas du c with class) qui leak ?

Reply

Marsh Posté le 05-06-2006 à 15:51:51    

masklinn a écrit :

Heuu non [:pingouino]
 
Ou alors j'veux un exemple de "moultement pire" [:pingouino]


 
Une classe avec des attributs flous ca te dis ? :p
 

Code :
  1. #!/usr/bin/env python
  2. import Levenshtein
  3.  
  4. class LevenKlass(type):
  5.         
  6.     def __init__(cls, name, bases, dict):
  7.         super(LevenKlass, cls).__init__(name, bases, dict)
  8.         def defaulter(inst,name):
  9.             max = 0
  10.             for item in inst.__dict__:
  11.                 diff = Levenshtein.jaro(item,name)
  12.                 if diff > max:
  13.                     selected = item
  14.                     max = diff
  15.             try:
  16.                 return getattr(inst,selected)
  17.             except UnboundLocalError:
  18.                 raise AttributeError
  19.  
  20.         setattr(cls, '__getattr__', defaulter)
  21.  
  22.  
  23. class levenish(object):
  24.     __metaclass__ = LevenKlass


le tout dans un levenish.py


Python 2.4.3 (#1, May 12 2006, 21:21:47)  
[GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from levenish import *
>>> lala = levenish()
>>> lala.caca = "pwet"
>>> print lala.coca
pwet
>>> lala.coco = "coin"
>>> print lala.coca
coin


 


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 16:02:06    

0x90 a écrit :

Une classe avec des attributs flous ca te dis ? :p


Super, tu peux faire ça dans tous les langages gérant les propriétés hein, y compris en C# [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-06-2006 à 16:24:43    

mon troll a pris \o/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2006 à 17:08:11    

masklinn a écrit :

Super, tu peux faire ça dans tous les langages gérant les propriétés hein, y compris en C# [:pingouino]


 
C'est ce que je voulais signifier, on peut avoir de mauvaises idées et les mettre en pratique dans beaucoup de langages [:spamafote] (ca ne visait pas python en particulier)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 05-06-2006 à 17:15:06    

Harkonnen a écrit :

mon troll a pris \o/


 
Il a pris et il est en train de devenir gros et gras a force d'etre nourri par tout le monde   :D  

Reply

Marsh Posté le 05-06-2006 à 17:21:21    

0x90 a écrit :

C'est ce que je voulais signifier, on peut avoir de mauvaises idées et les mettre en pratique dans beaucoup de langages [:spamafote] (ca ne visait pas python en particulier)


Oui mais non, là je te signale quand même que tu as du passer par les propriétés, get/setattr et les métaclasses, un débutant ne va pas réussir à se tirer dans le pied comme ça parce qu'il ne connaîtra ni ne saura utiliser ces fonctionalités [:spamafote]  
 
Je suis parfaitement au courant que plus ce que le langage fournit est puissant plus c'est risqué et ça peut être abusé, mais avec le PHP ça te pète à la gueule au niveau le plus basique [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-06-2006 à 17:27:38    

masklinn a écrit :

Oui mais non, là je te signale quand même que tu as du passer par les propriétés, get/setattr et les métaclasses, un débutant ne va pas réussir à se tirer dans le pied comme ça parce qu'il ne connaîtra ni ne saura utiliser ces fonctionalités [:spamafote]  
 
Je suis parfaitement au courant que plus ce que le langage fournit est puissant plus c'est risqué et ça peut être abusé, mais avec le PHP ça te pète à la gueule au niveau le plus basique [:spamafote]


 
tootafay d'accord :jap:


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed