Manipulation de types
PHP n'impose pas (et ne permet pas) de définir explicitement le type d'une variable lors de sa déclaration ; le type d'une variable est déterminé par son contexte d'utilisation. Par exemple, si une valeur de type string est assignée à la variable $var, alors $var devient de type string. Si une valeur de type integer est ensuite assignée à cette variable $var, alors son type devient integer.
Un exemple de conversion de type automatique avec PHP est l'opérateur d'addition '+'. Si une des opérandes est de type float, alors les deux opérandes seront évaluées comme de type float, et le résultat sera de type float. Sinon, les opérandes seront interprétées comme des integers, et le résultat sera également de type integer. Notez que cela ne modifie pas le type des opérandes en elle-mêmes ; la seule modification est la façon dont les opérandes sont évaluées, et le type de l'expression elle-même.
<?php $foo = "0"; // $foo est une chaîne de caractères (ASCII 48) $foo += 2; // $foo est maintenant un entier (2) $foo = $foo + 1.3; // $foo est maintenant un nombre à virgule flottante (3.3) $foo = 5 + "10 Little Piggies"; // $foo est un entier (15) $foo = 5 + "10 Small Pigs"; // $foo est un entier (15) ?>
Si les 2 derniers exemples vous semblent bizarres, reportez-vous à la section sur les conversions de chaînes en nombres.
Pour forcer une variable à être évaluée en un certain type, reportez-vous à la section sur le transtypage. Pour changer le type d'une variable, reportez-vous à la fonction settype().
Pour tester les exemples de cette section, utilisez la fonction var_dump().
Note:
Le comportement d'une conversion automatique en tableau est actuellement non-défini.
De plus, puisque PHP supporte l'indexation des chaînes de caractères via des positions en utilisant la même syntaxe que pour les tableaux, l'exemple suivant est vrai pour toutes les versions de PHP :
<?php $a = 'car'; // $a est une chaîne de caractères $a[0] = 'b'; // $a est toujours une chaîne de caractères echo $a; // bar ?>Reportez-vous à la section sur l'accès aux chaînes par caractères pour plus d'informations.
Modification de types
La modification de types en PHP fonctionne globalement de la même façon qu'en C : le nom du type désiré est écrit entre parenthèses avant la variable à traiter.
<?php $foo = 10; // $foo est un entier $bar = (boolean) $foo; // $bar est un booléen ?>
Les préfixes autorisés sont :
- (int), (integer) : modification en integer
- (bool), (boolean) : modification en boolean
- (float), (double), (real) : modification en float
- (string) : modification en string
- (array) : modification en array
- (object) : modification en object
- (unset) : modification en NULL (PHP 5)
La modification en binaire avec (binary) et le préfixe b ont été ajoutés en PHP 5.2.1
Notez que les tabulations et les espaces sont autorisés dans les parenthèses. Les exemples suivants sont donc fonctionnellement équivalents :
<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>
Modification d'une chaîne littérale et d'une variable en chaînes binaires :
<?php $binary = (binary) $string; $binary = b"binary string"; ?>
Note:
Au lieu de modifier une variable en chaîne, il est également possible d'entourer la variable de guillemets doubles.
<?php $foo = 10; // $foo est un entier $str = "$foo"; // $str est une chaîne $fst = (string) $foo; // $fst est également une chaîne // Ceci affichera "ils sont identiques" if ($fst === $str) { echo "ils sont identiques"; } ?>
Le comportement d'une modification de type n'est pas toujours évident suivant les types. Pour plus d'informations, reportez-vous à ces sections :