PHP – Variables et opérateurs

Cet article fait suite à mon introduction sur PHP. Dans l’introduction nous avons vu comment déclarer une variable chaine, et l’afficher. Dans cet article, nous verrons plus en détails le fonctionnement des variables et les opérateurs utilisable. Si vous ne savez pas ce qu’est un opérateur, vous pouvez toujours lire l’article Code <> / Général / Structure d’un programme.

Pour ceux qui ont sauté l’introduction, je rappelle que le PHP s’écrit entre les balises « <?php » et « ?> », que chaque ligne d’instruction se termine par un « ; », et qu’une variable se déclare simplement en préfixant son nom par un « $ ».

Les variables

En règle générale, dans un langage de programmation, lorsqu’on déclare une variable on en déclare son type et/ou sa taille (nombre entier, nombre à virgule, chaine de caractères, tableaux …). Ce n’est pas le cas en PHP, c’est pourquoi ce genre de langage est dénommé « faiblement typé », par opposition aux langages « fortement typé » tels que le C et le C++.

Il en résulte que le PHP est à la fois simple et complexe à apprendre. On peut écrire du code de mille et une façons, mais il y en a moins sujettes aux bogues ou failles de sécurité. Sachez qu’en PHP, il est tout de même possible de typer ses variables, mais on verra cela un peu plus tard. Nous pouvons connaître aussi le type d’une variable, et effectuer des comparaisons typées. Encore une fois, nous verrons cela plus tard, probablement dans les bonnes pratiques.

Je vais créer un répertoire « tutophp2 » sur mon serveur PHP et lui placer un fichier « index.php » à sa racine. Voyons maintenant comment déclarer simplement les différents type de variable en PHP.

Fichier « index.php » :
<?php

  $a = 5;
  $b = 3.1415;
  $c = 'Chaine';
  $d = "Chaine";

?>

Inutile d’exécuter ce code, il ne fait rien en soit à part assigner des valeur à des variables.

Explications

On a assigné un entier à « a », un nombre à virgule à « b », et une chaine de caractères à « c » et « d ». Les deux écritures pour l’assignation de « c » et « d » sont semblables dans ce cas-ci. Nous verrons un peu plus loin qu’il existe une subtile différence entre l’assignation de « c » et l’assignation de « d ».

Type des variables

Si on regarde de plus près nos variables, elles sont de trois types : « integer » (nombre entier), « double » (nombre à virgule), et « string » (chaine de caractères). Nous pouvons le vérifier grâce à la fonction « gettype » de PHP, qui prend en compte une variable de n’importe quel type en paramètre. Je parle ici de fonction et non d’instruction, mais l’appel à une fonction équivaut à une instruction. Nous avions vu dans l’introduction PHP l’instruction « echo » qui est en fait un mot clé, et surtout une fonction « magique ». Elle s’utilise sans parenthèse, et peut posséder un nombre de paramètres infini, quel que soit le type de paramètre qu’on lui donne. Utilisons-la maintenant, conjointement à de l’HTML pour la lisibilité, pour vérifier le type de nos variables.

Fichier index.php, v2 :
<?php

  $a = 5;
  $b = 3.1415;
  $c = 'Chaine';
  $d = "Chaine";

  echo gettype($a), '<br>';
  echo gettype($b), '<br>';
  echo gettype($c), '<br>';
  echo gettype($d), '<br>';

?>

Si nous exécutons ce code, notre page web nous indique bien :

integer
double
string
string

Nous nous rendons compte à présent que PHP « auto-type » les variables. Nous n’avons pourtant pas spécifié le type de nos variables. Essayons maintenant d’additionner « a » avec « b », et voyons le résultat.

Fichier index.php, v3 :
<?php

  $a = 5;
  $b = 3.1415;
  $c = 'Chaine';
  $d = "Chaine";
  $e = $a + $b;

  echo gettype($a), '<br>';
  echo gettype($b), '<br>';
  echo gettype($c), '<br>';
  echo gettype($d), '<br>';
  echo gettype($e), '<br>';

?>

Le code PHP ci-dessus nous ressort :

integer
double
string
string
double

Donc, un integer additionné à un double, ça nous donne un double. Ca parait cohérent, dans la mesure où PHP auto-type nos variables. PHP fait en fait ce qu’il veut de nos variables. S’il attend une chaine dans une fonction et qu’on lui donne un nombre, il convertit automatiquement le nombre en chaine de caractères. PHP est fait ainsi, et on ne le changera pas.

Les opérateurs

J’ai devancé quelque peu cette partie par l’introduction du « + » dans le code précédent. En PHP, on possède 6 opérateurs de bases. 5 opérateurs mathématiques, et un opérateur de concaténation de chaines de caractères.

Opérateurs mathématiques

On peut additionner (« + »), soustraire (« -« ), multiplier (« * »), diviser (« / »), et effectuer un modulo (« % »). N’oubliez jamais l’opérateur modulo, il vous servira plus que vous ne le pensez.

Opérateur de concaténation

Pour assembler deux chaines de caractères ensemble, on peut utiliser le « . ».


Mettons un peu tout cela en pratique. Cette fois, au lieu d’afficher le type de nos variables, on va afficher le résultat de nos opérations.

Fichier index.php, v4
<?php

  $a = 5;
  $b = 3.1415;
  $c = 'Chaine';
  $d = "Chaine";

  $e = $a + $b;
  $f = $a - $b;
  $g = $a * $b;
  $h = $a / $b;
  $i = $a % $b;
  $j = $c . ' - ' . $b;

  echo $e, '<br>', $f, '<br>', $g, '<br>', $h, '<br>', $i, '<br>', $j;

?>

Si on exécute ce code, voila ce qu’il nous produit :

8.1415
1.8585
15.7075
1.5915963711603
2
Chaine - 3.1415

Comme attendu et expliqué précédemment, la variable « b » a été automatiquement convertie en chaines de caractères. Cette souplesse dans les variables est vraiment pratique. Le résultat entre un integer et un double est un double, comme attendu.

Pour ceux qui ne savent pas ce qu’est un modulo, c’est simplement le reste de la division euclidienne entre deux nombres. Regardez sur Wikipédia pour en savoir plus.

Les tableaux

En programmation, on a souvent besoin des tableaux. Un tableau, en programmation, est une variable contenant d’autres variables. En PHP, il existe plusieurs manières de les définir. Je vais vous en présenter quelques-unes, et comment accéder à ces données. Il existe 2 façons d’enregistrer des variables dans des tableaux. La première, par indexation, en lui donnant un numéro (index). La seconde façon est de définir une clé. Le tableau, dans ce cas-ci, est équivalent à un dictionnaire de données dans d’autres langages de programmation.

L’indexation peut se faire soit automatiquement, soit en spécifiant l’index. Quant au dictionnaire de données, il faut obligatoirement définir une clé pour enregistrer ses variables. Voyons quelques exemples ensemble. Au passage, je vais vous apprendre de suite une fonction de débogage très utile en PHP. En effet, « var_dump() » permet de visualiser le type et le contenu de n’importe quelle type de variable. Cette fonction a un nombre d’arguments infini, ce qui me permet de m’en servir en une seule fois.

Fichier index.php v5 :
<?php

  $a = array();
  $b = array('chat', 'chien', 'furet');
  $c = array(0 => 'chat', 1 => 'chien', 5 => 'furet');
  $d = array(0 => 'chat', '1' => 'chien', 2 => 'furet');
  $e = array('animal_calins' => 'chat', 'animal_défense' => 'chien', 'animal_mignon' => 'furet');
  
  $f[0] = 'chat';
  $f[3] = 'chien';
  $f[10] = 'furet';
  
  $g['animal_calins'] = 'chat';
  $g['animal_défense'] = 'chien';
  $g['animal_mignon'] = 'furet';
  
  echo '<pre><code>';
  var_dump($a, $b, $c, $d, $e, $f, $g);
  echo '<br>--------------------<br>';
  echo $f[3], ' :: ', $d[1], ' :: ', $b['1'], ' :: ', $e['animal_défense'];
  echo '</code></pre>';

?>

Le code ci-dessus permet d’afficher ce contenu :

array(0) {
}
array(3) {
  [0]=>
  string(4) "chat"
  [1]=>
  string(5) "chien"
  [2]=>
  string(5) "furet"
}
array(3) {
  [0]=>
  string(4) "chat"
  [1]=>
  string(5) "chien"
  [5]=>
  string(5) "furet"
}
array(3) {
  [0]=>
  string(4) "chat"
  [1]=>
  string(5) "chien"
  [2]=>
  string(5) "furet"
}
array(3) {
  ["animal_calins"]=>
  string(4) "chat"
  ["animal_défense"]=>
  string(5) "chien"
  ["animal_mignon"]=>
  string(5) "furet"
}
array(3) {
  [0]=>
  string(4) "chat"
  [3]=>
  string(5) "chien"
  [10]=>
  string(5) "furet"
}
array(3) {
  ["animal_calins"]=>
  string(4) "chat"
  ["animal_défense"]=>
  string(5) "chien"
  ["animal_mignon"]=>
  string(5) "furet"
}

--------------------
chien :: chien :: chien :: chien

Pour commencer, mais qu’est-ce que j’ai fait ? Tout d’abord, « a » est un tableau vide. Pour « b »,  j’ai utilisé l’indexation automatique pour y enregistrer mes animaux de compagnie (index 0, 1, et 2). En « c », j’ai fait l’indexation explicitement. Si on analyse le résultat obtenu, j’ai des trous dans ce tableau : les index 2, 3, et 4 n’existent pas. En « d », j’ai fait l’indexation explicitement, mais avec une clé au milieu. Seulement si on regarde de plus près le résultat de sortie, en mémoire, ma clé « 1 » a été transformée en index 1, PHP ayant automatiquement converti ma chaine de caractères en nombre, sans qu’on ne lui ai rien demandé. En « e », j’ai utilisé des clés pour transformer le tableau en dictionnaire de données. En « f » et « g », j’ai juste déclaré mes tableau d’une façon différente.

A la fin du fichier, j’ai fait affiché plusieurs fois le mot « chien » depuis des tableaux différents. Vous noterez que j’ai utilisé un index pour « d » et une clé pour « b », alors que j’ai déclaré l’inverse. Dans le cas des tableaux, en PHP, toute clé qui contient un nombre est convertit en nombre implicitement, c’est ce qui fait à la fois la force, et la faiblesse du PHP. Une force, car c’est fort pratique, mais une faiblesse aussi car source de bogues ou de faille de sécurité.

Conclusion

Nous savons désormais comment créer des variables, dont les tableaux à une dimension, utiliser les opérateurs mathématique et l’opérateur de concaténation. Nous avons appris au passage comment déboguer un script en affichant le contenu des variables.

Dans le prochain article, nous verrons les embranchements conditionnels.

Laisser un commentaire