setType () konvertiert die Variable gemäß dem angegebenen Typ und modifiziert die ursprüngliche Variable selbst direkt. Die Syntax ist wie folgt:
bool settype(mixed &$var, string $type)
Es empfängt zwei Parameter:
$ var : Eine Variable, die in Typ konvertiert werden muss (Referenz muss übergeben werden).
$ type : Der Zieltyp kann "boolean" , "Integer" , "Float" , "String" , "Array" , "Objekt" oder "Null" sein.
Die Funktion kehrt treu zurück, um anzuzeigen, dass die Konvertierung erfolgreich ist, und falsch , um den Fehler anzuzeigen.
$val = '';
settype($val, 'integer');
echo $val; // Ausgabe 0
Problem : Die leere Zeichenfolge wird in 0 konvertiert, was möglicherweise nicht mit der erwarteten Logik übereinstimmt.
$val = [1, 2, 3];
settype($val, 'string');
echo $val; // Ausgabe "Array"
Problem : Dies verkettet Array -Elemente nicht in Zeichenfolgen, sondern gibt das Zeichenfolge "Array" aus.
$val = new stdClass();
settype($val, 'integer');
// Wirf eine Warnung,Kann nicht konvertieren
Problem : Komplexe Typen wie Objekte erhöhen Warnungen, wenn sie nicht in Skalare umgewandelt werden können.
Bestätigen Sie vor dem Aufrufen von SetType () , ob der ursprüngliche Typ der Variablen für die Konvertierung geeignet ist:
if (is_string($val)) {
settype($val, 'integer');
}
Filtern und überprüfen Sie die Benutzereingaben (z. B. $ _get , $ _post , $ _request ), um sicherzustellen, dass sie den erwarteten Typ erfüllen:
$age = $_GET['age'] ?? '';
if (is_numeric($age)) {
settype($age, 'integer');
}
Wenn möglich, verwenden Sie die Verwendung starker Conversion -Operatoren anstelle von setType (), um die Lesbarkeit und Sicherheit der Code zu verbessern:
$val = (int) $val;
Diese Methode wirkt sich nicht auf den Typ der ursprünglichen Variablen aus, es sei denn, sie wird neu zugewiesen, und es ist einfacher zu debuggen und zu verfolgen.
Obwohl setType () keine Ausnahmen auswirft, können Sie sie zusammenfassen, um die Ausfall -Handhabungslogik zu erhöhen:
function safeSetType(&$var, $type) {
$validTypes = ['boolean', 'integer', 'float', 'string', 'array', 'object', 'null'];
if (!in_array($type, $validTypes)) {
throw new InvalidArgumentException("Nicht unterstützte Zieltypen:$type");
}
return settype($var, $type);
}
Betrachten Sie ein typisches Szenario, um die Paging -Parameter aus der URL zu erhalten:
$page = $_GET['page'] ?? 1;
if (is_numeric($page)) {
settype($page, 'integer');
} else {
$page = 1;
}
$offset = ($page - 1) * 10;
// Als nächstes verwenden Sie diesen Offset, um die Datenbankabfrage auszuführen
$url = "https://gitbox.net/api/posts?page=" . $page;
In diesem Beispiel kann die Feststellung, ob es sich um eine Zahl und dann um Konvertierung handelt, sichergestellt, dass die $ -Seiten- Variable nicht zu einem unerwarteten Wert von 0 oder Nichteiger wird.