Syntaxe et variables en PHP

Un article de Mangue.org, l'encyclopéde libre.


Dans ce cours, nous aborderons la syntaxe et les variables en PHP. Si la syntaxe est très similaire à celle de langages comme le C, nous vous conseillons tout de même de vous attarder sur les variables dynamiques, une particularité du PHP.

Sommaire

La syntaxe

Le PHP obéit à des régles de syntaxe somme toute assez classiques :

  • Les noms de variables sont sensibles à la casse. (i.e les majuscules/minuscules sont prises en compte) $mavariable sera donc différent de $MaVariable.
  • Les noms de fonctions ne sont pas sensibles à la casse. mafonction() est identique à MAFONCTION(). (ceci est valable aussi bien pour les fonctions que vous définirez que pour les fonctions natives de PHP)
  • Les espaces blancs, tabulations et autres retours à la ligne sont ignorés par le parser PHP. Vous n'avez donc pas d'excuse pour indenter proprement votre code. ;)
  • Les instructions se terminent par des points-virgules.


Pour finir, parlons des commentaires. PHP permet d'insérer des commentaires dans son code de trois manières différentes:

  • A la manière du C++. Ex: // ceci est un commentaire. Tout ce qui se trouve après le '//' sera ignoré, et ce jusqu'à la fin de la ligne.
  • A la manière du Bourne Shell. Ex: # ceci est un commentaire. Tout ce qui se trouve après le '#' sera ignoré, et ce jusqu'à la fin de la ligne.
  • A la manière du C. Ex: /* ceci est un commentaire. */ Ici, tout ce qui se trouve entre le '/*' et le '*/' sera ignoré. Cela permet donc de faire des commentaires qui s'étendent sur plusieurs lignes.


Les variables

En PHP, tous les noms de variables sont précédés du caractère "$". Le nom de variable doit, après le $, obligatoirement commencer par un caractère alphabétique ou un underscore. (caractère "_") Passé les deux premiers caractères, on est libre de choisir n'importe quelle suite de caractères alphanumériques et d'underscores.

  • Pour résumer:$i, $compteur, $_tmp <-- Correct
  • $123i, $comp teur, _tmp <-- Incorrect

On n'est pas obligé, en PHP, de déclarer ses variables. Celles-ci seront automatiquement déclarées lors de leur première affectation. De fait, elles ne sont pas typées: on peut donc affecter une valeur de n'importe quel type à une variable.

Variables dynamiques

Les variables dynamiques permettent parfois de se sortir de situations désespérées. Elles autorisent en fait la création d'une variable dont le nom est contenu dans une autre variable. Admettons le bout de code suivant :

<?
 $MaVar = "Mangue";
 $$MaVar = ".Org";
?>

La première affectation est très classique, on n'a fait qu'affecter la chaine "Mangue" à la variable "$MaVar". La deuxième affectation elle, créer une variable "$Mangue", qui va contenir la chaine ".Org". Ainsi, si on tape:

 echo "$MaVar$Mangue est le meilleur site de
          prog de l'univers et de ses alentours";

Il s'affichera lors de l'exécution "Mangue.Org est le meilleur site de prog de l'univers et de ses alentours". Cela est possible car PHP commence le déréférencement par la variable la plus interne. Ainsi, lors de l'analyse de "$$MaVar = '.Org';", PHP interprète d'abord "$MaVar", qui devient "Mangue". Il reste donc "$" et "Mangue", qui donnent la variable "$Mangue", à laquelle sera affectée la chaine ".Org". Il est possible "d'emboiter" les variables sur un nombre infini de niveaux: cela dit, au delà de deux niveaux, la lecture de votre code (par vous-même, ou pire, par quelqu'un d'autre) risque de devenir bien difficile. C'est pourquoi il existe une syntaxe spéciale. Celle-ci sert uniquement lors de l'utilisation de variables dynamiques dans des chaines entre guillemets, ou pour résoudre des ambiguïtés lors de l'utilisation de tableaux de variables. Si on reprend l'exemple précédent, on aurait pu écrire :

echo "$MaVar${$MaVar} est le meilleur site de
          prog de l'univers et de ses alentours";

Cela aurait produit la même sortie.


L'utilisation de la syntaxe spéciale est d'un intérêt flagrant en ce qui concerne les tableaux: en effet, supposons que vous écriviez "$$MaVar[1]". Comment PHP peut-il savoir à quel niveau appliquer l'indice? C'est tout simplement impossible si on n'utilise pas les accolades. Ainsi, on écrira "${$var[1]}" si on veut appliquer l'indice au niveau interne, et "${$var}[1]" si au contraire on veut l'appliquer au niveau externe.

Types de variables

Même si les variables n'ont pas à être explicitement déclarées, PHP n'en conserve pas moins la notion de type. (Nous passerons volontairement outre la notion de classe. Celle-ci fera l'objet d'un cours particulier.)

  • Les entiers : Les entiers sont de nombres dont la plage dépend des plate-formes, mais reste équivalente à la portée du type long en C. Sur une plate-forme 32 bits, les valeurs vont de -2 147 483 648 à +2 147 483 647. En cas de dépassement de capacité, PHP convertit automatiquement l'entier incriminé en nombre décimal. On pourra exprimer un entier en décimal, hexadécimal ou encore en octal.
 $decimal = 10;
 $hexa = 0x0F;
 $octal = 020;
  • Les nombres décimaux : Ce type de donnée a la même portée que le type C double. Elle varie selon les plates-formes, mais va en général de 1.7E-308 à 1.7E+308. On peut exprimer ce type sous forme de nombre normal avec un point décimal, ou en notation scientifique.
 $normal = 0.017;
 $scientifique = 17.0E-3;
  • Les chaines : Une chaine est une suite de caractères. Elle peut être délimitée par des guillements simples ou doubles. Attention, leur utilisation ne produira pas le même effet: les chaines entourées de guillemets doubles sont sujettes aux substitutions de variables et au traitement des séquences d'échappement, contrairement aux chaines entourées de guillemets simples.
 <?
 $chaine = "(mais pas à CS)";
 echo "Je joue à Quake 3 $chaine\tQ3 rocks!";
 echo 'Je joue à Quake 3 $chaine\tQ3 rocks!';
 ?>

Le premier appel à echo va afficher "Je joue à Quake 3 (mais pas à CS) Q3 rocks!", tandis que le deuxième va afficher "Je joue à Quake 3 $chaine\tQ3 rocks!".

  • Les séquences d'échappement de PHP: \n: Nouvelle ligne
  • \t: Tabulation
  • \r: Retour chariot
  • \\: Anti slash
  • \$: Signe dollar
  • Les tableaux : Un tableau est un type de données pouvant contenir plusieurs valeurs, indexées numériquement ou à l'aide de chaines.
 $tableau[0] = "Mangue.Org";
 $tableau[1] = "rulez!";

On remarquera que lorsqu'on veut ajouter un élément au tableau, il suffit de faire une affectation dans spécifier d'indice :

 $tableau[]="pouet";

Cette technique est aussi valable pour les tableaux dont les valeurs ne sont pas indexées successivement. (i.e si les postes 1, 10, et 3 d'un tableau sont affectées, PHP affectera dans ce cas le poste d'indice 11)

Précision sur les chaines de caractères : notez que celles-ci peuvent tout à fait être considérées comme des tableaux de caractères. Une affectation de type $MaChaine[3]='a'; est tout à fait possible.

Les tableaux peuvent également, comme nous l'avons dit, utiliser des chaines pour leur indexation. On parle alors de tableaux associatifs. Il est même possible de mélanger indexation numérique et indexation par chaine dans le même tableau.

 // exemple de tableau associatif
 
 $mois["Janvier"] = 1;
 $mois["Février"] = 2;
 $mois["Mars"] = 3;

Le transtypage

Le transtypage désigne l'action de convertir un type de données en un autre. Ici, il peut servir en plus à définir explicitement le type d'une donnée. La façon d'opérer est exactement la même qu'en C:

 $UnEntier = (int) "4320Pastèque";

Ici, au lieu de créer une chaine, PHP va, grâce au "(int)", créer un entier qui aura pour valeur 4320.

  • Voici les opérateurs de trantypage du PHP: (int), (integer): Conversion en entier
  • (real), (double), (float): Conversion en nombre décimal
  • (string): Conversion en chaine
  • (array): Conversion en tableau
  • (object): Conversion en objet

Le PHP propose des fonctions qui permettent de vérifier le type d'une variable: is_int(), is_float(), is_double(), is_array(), is_string(), is_object(), etc...

Conclusion

Et voilà, nous sommes presque prêts à commencer le développement de nos premiers scripts! Mais avant tout, nous allons dans le prochain cours nous intéresser aux structures de contrôle.

Outils personels