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 de multiplication '*'. 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 = "1"; // $foo est une chaîne de caractères (ASCII 49)
$foo *= 2; // $foo est maintenant un entier (2)
$foo = $foo * 1.3; // $foo est maintenant un nombre à virgule flottante (2.6)
$foo = 5 * "10 Little Piggies"; // $foo est un entier (50)
$foo = 5 * "10 Small Pigs"; // $foo est un entier (50)
?>
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
La modification en binaire avec (binary) et le préfixe b ont été ajoutés en PHP 5.2.1. Notez que le cast (binary) est essentielement le même que (string), mais il ne doit pas être invoqué.
Le cast (unset) a été déconseillé depuis PHP 7.2.0. Notez que le cast (unset) est identique à l'assignation de la valeur NULL à la variable ou à l'appel. Le cast (unset) sera supprimé à partir de PHP 8.0.0.
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 :
Version en cache
24/11/2024 04:19:43 Cette version de la page est en cache (à la date du 24/11/2024 04:19:43) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.types.type-juggling.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.