La caractéristique importante de SetType () est qu'elle modifie directement la variable entrante elle-même, plutôt que de renvoyer la nouvelle valeur convertie. Sa valeur de retour est toujours booléenne vraie , indiquant si la conversion est réussie.
$var = "123";
$result = settype($var, "integer");
var_dump($var); // int(123)
var_dump($result); // bool(true)
Le malentendu est que certains développeurs peuvent penser que le résultat $ sera une valeur convertie, mais ignorez que la variable $ var a été modifiée.
Lors de la conversion d'une chaîne en un entier ou un numéro de point flottant, setType () analyse le nombre selon le début de la chaîne et s'arrête lors de la rencontre de caractères non nucères, ce qui entraîne le résultat qu'il peut ne pas correspondre aux attentes.
$str = "123abc";
settype($str, "integer");
var_dump($str); // int(123)
Cette troncature implicite nécessite une attention particulière lorsqu'elle traite des chaînes contenant des nombres et des lettres mitigés.
Lors de la conversion d'une chaîne en un booléen, les chaînes non vides sont considérées comme vraies , et les seules qui sont considérées comme fausses sont la chaîne vide "" et le numéro 0 (y compris la chaîne "0" ).
$str = "false";
settype($str, "boolean");
var_dump($str); // bool(true)
Même si le contenu de la chaîne est "faux" , il est toujours booléen vrai après la conversion, ce qui peut conduire à des erreurs de jugement logiques.
SetType () ne peut pas convertir directement les objets en tableaux, et il ne peut pas convertir des tableaux en objets. Pour cette exigence, une méthode de conversion plus appropriée doit être utilisée.
$obj = new stdClass();
$obj->name = "gitbox";
$result = settype($obj, "array");
var_dump($result); // bool(false)
var_dump($obj); // object(stdClass) with property name
// Coulée recommandée ou autres fonctions:
$arr = (array) $obj;
var_dump($arr);
SetType () prend en charge la conversion des variables en "NULL" , mais notez que cela définit la valeur variable en nul et ne peut pas être utilisé pour les constantes ou les expressions, mais ne fonctionne que sur des variables.
$var = "gitbox.net";
settype($var, "null");
var_dump($var); // NULL
Essayer de convertir un tableau directement avec SetType () en une chaîne entraînera un avertissement:
$arr = [1, 2, 3];
settype($arr, "string"); // Warning: Array to string conversion
La conversion d'un tableau en une chaîne nécessite l'implance () ou d'autres méthodes.
SetType () est un outil puissant pour modifier directement les types de variables, mais en raison de son comportement implicite et de la modification directe des variables, les développeurs doivent prêter attention aux points suivants lors de leur utilisation:
Comprenez que la fonction modifie la variable elle-même, pas renvoie la valeur convertie.
Lorsqu'une chaîne convertit une valeur numérique, le contenu après des caractères non numériques sera tronqué.
Les chaînes non vides sont vraies lors de la conversion de Boolean.
Il existe des restrictions sur la conversion des types d'objets et de tableau, et d'autres méthodes sont nécessaires.
La conversion en null efface la valeur variable.
Ne convertissez pas directement les tableaux en chaînes.
En comprenant ces problèmes communs, vous pouvez vous aider à utiliser la fonction SetType () plus en toute sécurité et avec précision, en évitant les vulnérabilités et les exceptions logiques potentielles.