SetType () convertira la variable en fonction du type spécifié et modifiera directement la variable d'origine elle-même. La syntaxe est la suivante:
bool settype(mixed &$var, string $type)
Il reçoit deux paramètres:
$ var : une variable qui doit être convertie en type (la référence doit être transmise).
$ Type : Le type cible peut être "booléen" , "entier" , "float" , "string" , "array" , "objet" ou "null" .
La fonction renvoie vrai pour indiquer que la conversion est réussie et fausse pour indiquer l'échec.
$val = '';
settype($val, 'integer');
echo $val; // Sortir 0
Problème : la chaîne vide est convertie en 0, ce qui peut ne pas correspondre à la logique attendue.
$val = [1, 2, 3];
settype($val, 'string');
echo $val; // Sortir "Array"
Problème : Cela ne concatenait pas les éléments du tableau en chaînes, mais sort le "tableau" de la chaîne.
$val = new stdClass();
settype($val, 'integer');
// Jeter un avertissement,Impossible de convertir
Problème : des types complexes tels que les objets soulèveront des avertissements lorsqu'ils ne peuvent pas être convertis en scalaires.
Avant d'appeler SetType () , confirmez si le type d'origine de la variable convient à la conversion:
if (is_string($val)) {
settype($val, 'integer');
}
Filtrez et vérifiez les entrées utilisateur (telles que $ _get , $ _post , $ _request ) pour s'assurer qu'ils respectent le type attendu:
$age = $_GET['age'] ?? '';
if (is_numeric($age)) {
settype($age, 'integer');
}
Lorsque cela est possible, l'utilisation de forts opérateurs de conversion au lieu de setType () pour améliorer la lisibilité et la sécurité du code:
$val = (int) $val;
Cette méthode n'affectera pas le type de la variable d'origine, sauf si elle est réaffectée, et il est plus facile de déboguer et de suivre.
Bien que SetType () ne lance pas des exceptions, vous pouvez l'encapsuler pour augmenter la logique de traitement des échecs:
function safeSetType(&$var, $type) {
$validTypes = ['boolean', 'integer', 'float', 'string', 'array', 'object', 'null'];
if (!in_array($type, $validTypes)) {
throw new InvalidArgumentException("Types de cibles non pris en charge:$type");
}
return settype($var, $type);
}
Considérez un scénario typique pour obtenir les paramètres de pagination de l'URL:
$page = $_GET['page'] ?? 1;
if (is_numeric($page)) {
settype($page, 'integer');
} else {
$page = 1;
}
$offset = ($page - 1) * 10;
// Ensuite, utilisez ce décalage pour exécuter la requête de la base de données
$url = "https://gitbox.net/api/posts?page=" . $page;
Dans cet exemple, déterminer s'il s'agit d'un nombre, puis d'une conversion peut garantir que la variable de page $ ne devient pas une valeur inattendue 0 ou non en entime.