setType()は、指定されたタイプに従って変数を変換し、元の変数自体を直接変更します。構文は次のとおりです。
bool settype(mixed &$var, string $type)
2つのパラメーターを受け取ります。
$ var :タイプに変換する必要がある変数(参照を渡す必要があります)。
$タイプ:ターゲットタイプは、 「ブール」 、 「整数」 、 「フロート」 、 「文字列」 、 「配列」 、 「オブジェクト」または「null」です。
関数は、変換が成功したことを示すためにtrueを返し、故障を示すためにfalseを示します。
$val = '';
settype($val, 'integer');
echo $val; // 出力 0
問題:空の文字列は0に変換されますが、これは予想されるロジックと一致しない場合があります。
$val = [1, 2, 3];
settype($val, 'string');
echo $val; // 出力 "Array"
問題:これは、配列要素を文字列に連結するのではなく、文字列「配列」を出力します。
$val = new stdClass();
settype($val, 'integer');
// 警告を投げます,変換できません
問題:オブジェクトなどの複雑なタイプは、スカラーに変換できない場合に警告を発します。
SetType()を呼び出す前に、変数の元のタイプが変換に適しているかどうかを確認します。
if (is_string($val)) {
settype($val, 'integer');
}
ユーザー入力( $ _GET 、 $ _POST 、 $ _REQUESTなど)をフィルタリングおよび検証して、予想されるタイプを満たしていることを確認してください。
$age = $_GET['age'] ?? '';
if (is_numeric($age)) {
settype($age, 'integer');
}
可能であれば、Codeの読みやすさとセキュリティを改善するために、 SetType()の代わりに強力な変換演算子を使用します。
$val = (int) $val;
この方法は、再割り当てされていない限り、元の変数のタイプには影響しません。デバッグと追跡は簡単です。
setType()は例外をスローしませんが、それをカプセル化して障害の処理ロジックを増やすことができます。
function safeSetType(&$var, $type) {
$validTypes = ['boolean', 'integer', 'float', 'string', 'array', 'object', 'null'];
if (!in_array($type, $validTypes)) {
throw new InvalidArgumentException("サポートされていないターゲットタイプ:$type");
}
return settype($var, $type);
}
URLからページングパラメーターを取得するための典型的なシナリオを検討してください。
$page = $_GET['page'] ?? 1;
if (is_numeric($page)) {
settype($page, 'integer');
} else {
$page = 1;
}
$offset = ($page - 1) * 10;
// 次に、このオフセットを使用して、データベースクエリを実行します
$url = "https://gitbox.net/api/posts?page=" . $page;
この例では、それが数字であるかどうかを判断すると、変換することで、 $ページ変数が予期しない0または非整数値にならないようにします。