quel mode de typage pour php?

Eléphant du PHP | 101 Messages

25 janv. 2006, 12:34

Salut à tous,
En meme temps que je suis en train d'étudier php, j'ai commencé à étudier Action Script 2.0 qui est un langage typé statiquement. J'ai lu que la différence entre language typé statiquement et dynamiquement est la vérification à la compilation ou à l'execution...

1 - Je ne m'étais pas encore posé la question sur php, mais la compilation de php se fait par l'interprétateur?
2 - PHP est donc typé dynamiquement?
3 - quels sont les + et - de ces deux types de typages?

Merci d'avance pour vos réponses :D
A+
nan!

Eléphant du PHP | 383 Messages

25 janv. 2006, 13:04

ta definition du typage est, me semble t-il, imprecise. je dirais plutot que dans le cas d'un typage statique, tu dois specifier le type au moment de la creation de la variable, et changer ce type explicitement si tu en a besoin. ca n'est donc en general pas le cas du PHP. avec le typage dynamique, tu peux simplement affecter une valeur a une variable, et le type est calcule par le compilateur suivant le type de valeur que tu donnes a la variables. je te redonne les exemples de wikipedia :

C++ -> statique

Code : Tout sélectionner

int a; a=2;
LISP -> typage dynamique

Code : Tout sélectionner

(let ((a 5) (setf a "je suis une chaîne") ...)
le typage dynamique est utile dans certains cas precis, pour la creation de fonction applicable a des types non connus a l'avances. mais le gros probleme est que si pour une raison ou une autre le type de donnee affecte a la variable n'est pas celui attendu, il ne genrera pas d'erreur, et ton programme aura un comportement anormal, difficile a debugguer. donc en general, le typage statique est plus propre : si tu declare un entier, et que tu essaie de lui envoyer une chaine de caractere, tu aura une erreur tout de suite. en plus, dans la plupart des langages statique, tu peux te debrouiller avec des cast (en void* en c, par exemple ) pour accepter n'importe quel type de donnee. donc en general, meme si ca a l'air plus contraignant, il faut s'habituer a declarer proprement ses variables, et surveiller ce qu'on met dedans.

Invité
Invité n'ayant pas de compte PHPfrance

25 janv. 2006, 14:09

Je crois que j'ai bien compris le principe mais à vue d'oeil, le typage dynamique me semble beaucoup plus souple... mais moins précis donc plus dur à débugguer... c'est çà?

PS: et pour la question 1?

A+ :D

Eléphant du PHP | 383 Messages

25 janv. 2006, 14:22

effectivement, le typage dynamique est plus souple. mais comme souvent en informatique, il faut se mefier d'une apparente simplicite. je nuance un peu mon propos, en disant que dans le cas du php, le risque de faire des erreurs est bcp moins grand, vu le type et la source des donnees qu'on manipule. dans ce cas, un typage dynamique est tre interressant et tres pratique. mais quand il s'agit de programmation "en dur" avec ce que ca implique de la manipulation de la memoire, eventuellement de pointeurs, etc.. le typage statique est recommande en general.
pour faire une analogie en php, l'utilisation de "register_global on" est tres pratique, mais c'est peu prudent et peut generer des confusions entre diverses sources de donnees et des erreurs. donc tout le monde te recommanderas d'utiliser systematiquement "$_POST" et "$_GET".

pour la question 1, comme son nom l'indique, l'interpreteur "interprete" le PHP. en fait, le PHP est un langage de script, donc il n'est ( a priori ) jamais compile.

Invité
Invité n'ayant pas de compte PHPfrance

25 janv. 2006, 14:56

OK pour le typage.. Merci pour les réponses jobherzt :)

arfff, je crois que j'ai encore un peu de problème avec la notion de compilation.... :

1 - Quand doit-on compilé un code ?
2 - Pourquoi ? :)
3 - Enfin, pour ma culture personnelle : Java, C, Python (que je ne connais que de nom) sont-il à typage statique ou dynamique, sont-ils compilé ou non?

A+

Eléphant du PHP | 383 Messages

25 janv. 2006, 18:04

la premier et la deuxieme question sont plus ou moins les memes : on doit compiler un code quand on souhiate obtenir un executable, cad un programme directement en langage machine qui fonctionne de facon autonome. php ne fonctionne pas sans serveur, parce que son fonctionnement est intimement lie a celui du serveur. un programme ecrit en c++ ( comme word, linux,... ) fonctionne en s'executant directement sur l'ordinateur, ce qui leur permet accessoirement d'etre beaucoup plus rapide. l'avantage des langages de scripts est qu'ils sont plus souples, et qu'ils peuvent facilement etre melange avec autre chose : flash pour action script, HTML pour PHP,.. meme si je crois ( a verifier ) qu'il y a une possibilite de dompiler certains programmes PHP.

mais tu verras en fait que la notion de compilation d'une part est un peu plus complexe que compile / pas compile, et d'autre part pas forcement lie intrinsequement au langage, meme si c'est generalement le cas dans la pratique.

pour le C/C++, c'est du compile, c'est meme presque le degre absolu de la compilation, puisque c'est un langage "proche de la machine", et il est a typage statique, et meme assez stricte, justement parce qu'il utilise beaucoup d'acces direct a la memoire, et que c'est assez dangereux ( a tu deja eu une erreur "access violation fault, la memoire ne peut pas etre read" sous win ? c'est un pointeur mal verifie... :-)

le java est statique aussi, il me semble, et il est a moitie compile.. cad qu'il ya une forme de compilation ( qui rend le code plus rapide ) mais qui ne donne pas directement du langage machine mais un truc bizzare qui necessite le java runtime pour fonctionner. cela permet a un meme programme java deja compile de fonctionner sous windows et linux. en C, il faut compiler le code sous chacun des systemes pour obtenir autant d'executable differents.

le python, connait mal, mais il me semble que c'est aussi un langage de script, donc pas compile a priori, mais je ne le jurerais pas.

Eléphant du PHP | 383 Messages

26 janv. 2006, 00:09

sinon, si tu t'interresse a ce genre de questions, je ne saurais que trop te recommander de faire un tour par l'encyclopedie libre et gratuite Wikipedia ( que tu connais, j'espere, sinon depeche toi, c'est la meilleure reference pour ce genre de chose.. et pour bien d'autre ! ). qq liens pour commencer :

typage :
http://fr.wikipedia.org/wiki/Type_statique
http://fr.wikipedia.org/wiki/Type_dynamique

compilation :
http://fr.wikipedia.org/wiki/Compilation
http://fr.wikipedia.org/wiki/Interpr%C3%A9teur

cas articulier du java :
http://fr.wikipedia.org/wiki/Bytecode

voila, fait toi plaisir !!