PHP est un langage de script à l'origine : le but est de faire un langage simple et rapide pour générer du code. Il est largement inspiré par PERL dont on ressent l'héritage. Mais il est aussi inspiré par C et par java (pour l'orientation object du php5).
Comme tout langage de script, il n'est pas réellement compilé mais interprété : le code est analysé au fur et à mesure (enfin c'était parfaitement vrai jusqu'en PHP3).
Le parti pris de cette simplicité c'est de ne pas typer les variables, elles ont bien un type interne mais son converties en fonction du contexte d'utilisation. Bien évidemment comparé au langages typés, ça peut poser des problèmes pour ce qui est du débogage.
Au final les variables sont stockés dans un tableau ou plutôt une table de hashage qui à partir du nom rend la valeur : rapide efficace, et comme cela ne se base pas sur l'adresse (langages compilés), cela permet de faire du code compilé à la volée (fonction éval) ou du déréférencement "à la php" (ex. : $$toto qui équivaut à avoir écrit $[valeur de toto]). Mais les possibilités sont bien plus grandes.
le cout de la création par POST ou GET est du à une option de configuration (register_global) qui transforme les paramètres en variables globales : avec cette option, la page http://www.site.net/toto.php?foo=bar fera que dans la page toto la variable $foo sera initialisée à "bar". Mais cette option (horrible et à proscrire pour des raisons de sécurité) est désactivée par défaut depuis php 4.2
Voilà, j'ai fini ma petite intro
++