Manuel PHP
Précédent | Chapitre 6. Les types | Suivant

# Définition du type

`PHP` ne nécessite pas de déclaration explicite du type d'une variable. Le type d'une variable est déterminé par le contexte d'utilisation. Par exemple, si vous assignez une chaîne de caractères à la variable `var`, var devient une chaîne de caractère. Si vous assignez un nombre entier à `var`, elle devient un entier.

Un exemple de convertisseur automatique de type est l'opérateur '+'. Si un des opérandes est de type double, alors tous les opérandes sont évalués comme des variables de type double et le résultat est de type double. Sinon, tous les opérandes sont évalués comme des variables de type entier et le résultat sera du type entier. Il est à noter que cela NE CHANGE PAS le type des opérandes. Le seul changement est la manière dont les opérandes sont évaluées.

Exemple 6-44. Conversion automatique

`<?php $foo = "0"; // $foo est une chaîne de caractères (ASCII 48) $foo += 2; // $foo est maintenant du type entier (2) $foo = $foo + 1.3; // $foo est maintenant du type double (3.3) $foo = 5 + "10 Petits cochons"; // $foo est du type entier (15) $foo = 5 + "10 cochonnets"; // $foo est du type entier (15) ?>`

Si les deux derniers exemples vous semblent obscurs ou si vous voulez forcer une variable a être évaluée avec un certain type, reportez-vous au paragraphe Conversion de types.

Si vous voulez forcer le type d'une variable, vous pouvez vous reporter à la section transtypage. Si vous voulez changer le type d'une variable, utilisez settype().

> Note : Le comportement de la conversion automatique est actuellement indéfini.

> Exemple 6-45. Conversion automatique indéfinie

> `<?php $a = "1"; // $a est une chaîne $a[0] = "f"; // Mais que sont les index de chaîne? ?>`

> Etant donné que `PHP` supporte l'indexation de chaîne avec des offsets identiques à celles des tableaux, l'exemple ci-dessus conduit à un problème : est ce que `$a` est un tableau, dont le premier élément est "`f`", ou bien est ce que "f" est le premier élément de la chaîne de caractères `$a`?

> Les versions courantes de `PHP` interprète la seconde assignation comme un index de chaîne, et donc `$a` devient "`f`", et le résultat de cette conversion automatique doit être considéré comme indéfini. `PHP` 4 a introduit la syntaxe avec les accolades pour accéder aux caractères d'une chaîne. Utilisez plutôt le code ci-dessous :

> Exemple 6-46. Conversion automatique indéfinie(2)

> `<?php $a = "abc"; // $a est une chaîne $a{1} = "f"; // $a vaut maintenant "afc" ?>`

> Voyez la section Accès aux caractères d'une chaîne pour plus de détails.

## Transtypage

La conversion de type en `PHP` fonctionne de la même manière qu'en C : le nom du type désiré est écrit entre parenthèses devant la variable à transtyper ("cast").

Exemple 6-47. Transtypage

`<?php $foo = 10; // $foo est un entier $bar = (double) $foo; // $bar est un double ?>`

Les conversions autorisées sont :

- `(int)`, `(integer)` - type entier

- `(bool)`, `(boolean)` - booléen

- `(real)`, `(double)`, `(float)` - type double

- `(string)` - type chaîne

- `(array)` - type tableau

- `(object)` - type objet

Il est à noter que les tabulations et les espaces sont autorisés à l'intérieur des parenthèses, donc les lignes suivantes sont équivalentes :

Exemple 6-48. Transtypage et espaces

`<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>`

> Note : Au lieu de transtyper une variable en chaîne, vous pouvez aussi l'insérer entre deux guillemets doubles :

> Exemple 6-49. Transtypage en chaîne

> `<?php $foo = 10; // $foo est un entier $str = "$foo"; // $str est une chaîne $fst = (string) $foo; // $fst est aussi une chaîne // Ceci affiche : "Identique" if ($fst === $str) { echo "Identique"; } ?>`

Le transtypage n'a pas toujours de résultat prévisible. Pour plus d'informations, voyez :

- Conversion en booléen

- Conversion en entier

- Conversion en nombre à virgule flottante

- Conversion en chaîne de caractères

- Conversion en tableau

- Conversion en objet

- Conversion en ressource

Précédent | Sommaire | Suivant
Pseudo-types utilisés dans cette documentation | Niveau supérieur | Les variables