1 Introduction
Il y a plusieurs catégories de types en Php.
Tout d'abords les types scalaires : Les chaînes de caractères (string), les entiers (integer), les réels (float ou double) et les booléens.
Ensuite les types composés : les tableaux (array), les objets (object), les "callable" (callable) et les "iterable" (iterable).
Enfin les types spéciaux : NULL, ressource, mixed et void.
2 les types scalaires
Les chaines
Une chaîne de caractère est un suite d'octet contenu dans un tableau.
Sa longueur est contenue dans un entier, si vous êtes en 32 bit elle est limité à ... 2 Go !
Il n'y a aucune interprétation du contenue par le langage, contrairement au langage C une chaîne peut donc contenir un octet valant 0 (\x00).
De plus Php ne tient pas compte de l'encodage (il laisse ça aux fonctions des librairies qui traitent les chaînes de caractères) et donc les caractères accentués peuvent avoir différentes valeurs.
Les chaînes peuvent être délimitées plusieurs façons.
Tout d'abords par des guillemets.
Entre guillemets les contenu des variables est interprété, ainsi que les caractères d'échappement (ceux précédé de l'antislash \)
Exemple
<?php
$str = "une chaine simple";
$str2 = "une chaine avec un retour à la ligne";
$str3 = "$str suivi d'$str2 \n";
print $str3;
?>
pour le tester enregistrez le dans un fichier, par exemple ~/tmp.php puis dans un shell tapez php ~/tmp.php.
Le résultat devrait être :
$ php ~/tmp.php
une chaine simple suivi d'une chaine avec un retour à la ligne
$
La seconde façon de délimiter un chaîne c'est avec des apostrophes.
Dans ce cas les caractères d'échappements et les variables contenues ne sont pas interprétés. Il y a deux exceptions \\ et \' qui correspondent respectivement à l'antislash (\) et à l'apostrophe (').
<?php
$str = 'une chaine simple';
$str2 = 'une chaine sans un retour à la ligne';
$str3 = '$str suivi d\'$str2 \n';
print $str3;
?>
Le résultat devrait être
$ php tmp.php
$str suivi d'$str2 \n$
Une troisième façon de délimiter une chaîne est la syntaxe heredoc (inspirée du shell). Elle permet des saisir un texte sur plusieurs lignes et le contenu est interprété (comme avec les guillemets).
Elle consiste à utiliser trois signes inférieurs suivi d'un label désignant la fin du texte. Ce label doit être placé en première colonne et suivi d'un point virgule.
Exemple :
<?php
$auteur = 'moi';
$str = <<<FIN
un texte sur plusieurs
lignes ecrit par: \n $auteur
FIN;
print $str;
?>
Le résultat devrait être
$ php tmp.php
un texte sur plusieurs
lignes ecrit par:
moi
$
Notez que le nom la variable $auteur est interprétée et que le \n est converti en retour à la ligne.
L'inconvénient de cette solution c'est que le texte ne peut pas contenir le label suivi d'un point virgule en premier colonne. Cependant vous avec les choix du label donc c'est facilement contournable.
La dernière façon de délimiter une chaîne est appelée Nowdoc.
Elle fonctionne comme les guillemets simples et dispose d'une syntaxe similaire à la précédente. La différence c'est que le label est placé entre guillemet simple.
Voici l'exemple précédent 'converti' :
<?php
$auteur = 'moi';
$str = <<<'FIN'
un texte sur plusieurs
lignes ecrit par: \n $auteur
FIN;
print $str;
?>
et son résultat :
$ php tmp.php
un texte sur plusieurs
lignes ecrit par: \n $auteur$