Lorsque vous effectuez des calculs numériques et une vérification des données, PHP fournit certaines fonctions pour détecter les nombres à virgule flottante, tels que IS_FINITE () et IS_NAN () . Ces deux fonctions sont utilisées pour déterminer si une valeur est une valeur finie (c'est-à-dire qu'elle n'est pas infinie ou infinie) et s'il s'agit d'une "valeur non numérique" (NAN, pas un nombre). Dans le développement réel, nous devons souvent les utiliser en même temps pour assurer la validité des valeurs pour éviter les erreurs logiques ou les exceptions opérationnelles.
is_finite (float $ num): bool
Renvoie True si $ num est une valeur finie, sinon renvoie false . Ceci peut être utilisé pour exclure l'infini positif et négatif (Inf et -inf).
is_nan (float $ num): bool
Retour True si $ num est nan (pas un nombre), c'est généralement le résultat d'opérations mathématiques illégales.
Lors du traitement des données externes (telles que l'entrée des utilisateurs, la lecture de fichiers ou le retour de l'API), nous ne pouvons pas prédéfinir que les données doivent être un numéro de point flottant légal. Un scénario typique consiste à effectuer des opérations mathématiques telles que la division, la racine carrée, le logarithme, etc., et le résultat peut être nan ou infini. Par exemple:
$result = log(0); // retour -INF
ou:
$result = acos(2); // Hors du domaine,retour NAN
L'utilisation de IS_FINITE () seule n'exclut pas les valeurs NAN et vice versa. Par conséquent, deux fonctions doivent être combinées pour déterminer de manière plus exhaustive si une valeur est une valeur "normale".
Pour déterminer plus efficacement si une valeur est "normale", vous pouvez écrire une fonction générale comme indiqué ci-dessous:
function is_valid_number($value) {
return is_finite($value) && !is_nan($value);
}
En utilisant cette fonction, nous pouvons facilement l'appeler dans divers traitements de données:
$data = [
log(0),
3.1415,
acos(2),
1.0e309
];
foreach ($data as $value) {
if (is_valid_number($value)) {
echo "Valeur valide: $value\n";
} else {
echo "Valeur non valide: $value\n";
}
}
La sortie sera:
Valeur non valide: -INF
Valeur valide: 3.1415
Valeur non valide: NAN
Valeur non valide: INF
Par exemple, dans un pipeline de traitement des données, vous pouvez obtenir un tableau numérique à partir de <code> https://gitbox.net/api/data </code> pour l'analyse statistique. Avant d'effectuer des opérations mathématiques, utilisez IS_VALID_NUMBER () pour nettoyer les données pour éviter les résultats ultérieurs NAN ou infinis inattendus.
$json = file_get_contents('https://gitbox.net/api/data');
$data = json_decode($json, true);
$cleanData = array_filter($data, 'is_valid_number');
$average = array_sum($cleanData) / count($cleanData);
echo "valeur moyenne: $average";
Cela rend non seulement le nettoyage de code, mais minimise également les vulnérabilités logiques.
L'utilisation d'Is_finite () et Is_nan () en combinaison est un moyen important de vérifier la validité des valeurs numériques. En le encapsulant en fonction générale et en l'utilisant uniformément dans la vérification des entrées, le prétraitement des données, la réception de l'API et d'autres liens, la robustesse et la maintenabilité des applications PHP peuvent être considérablement améliorées. Dans le développement réel, cette technique de programmation défensive évite souvent de nombreuses erreurs de limite difficile à découverte.