HexDec accepte uniquement les nombres hexadécimaux sous forme de chaînes en entrée. Si un type de non-chaîne est passé, PHP se convertira automatiquement en premier, mais cela peut entraîner une exception au résultat. Par exemple:
<?php
// Utilisation correcte,Entrée de chaîne
echo hexdec("1a"); // Sortir 26
// Entrée numérique,Convertir automatiquement en chaîne "26"
echo hexdec(26); // Sortir 38,parce que 26 Sera traité comme une chaîne "26" traiter avec
Faites attention aux malentendus que cette conversion de type automatique peut provoquer. Confirmer que le type de paramètres d'entrée est la première étape du débogage.
Plusieurs fois, HexDec renvoie un résultat qui ne répond pas aux attentes car l'entrée elle-même est incorrecte. À l'heure actuelle, vous pouvez imprimer des données avant d'appeler et confirmer le contenu d'entrée:
<?php
$hexString = "1g"; // Personnages illégaux g
if (!ctype_xdigit($hexString)) {
echo "La chaîne d'entrée contient des caractères non hexadécimaux: $hexString\n";
}
echo hexdec($hexString); // Sortir 1,parce que遇到Personnages illégaux后停止转换
C'est une bonne habitude d'utiliser la fonction ctype_xdigit () pour détecter si une chaîne est légale en hexadécimal.
Si vous utilisez des IDE modernes comme Phpstorm, il est recommandé de définir des points d'arrêt, un débogage étape par étape du programme et d'observer les changements avant et après la transmission de la variable dans hexdec . La surveillance en temps réel des types et valeurs de variables peut vous aider à découvrir des entrées ou une contamination des données inattendues.
Bien que HexDec ne lance pas des exceptions, vous pouvez utiliser le journal d'erreur de PHP et le mécanisme de gestion des exceptions pour écrire un code de sécurité autour du point d'appel, tel que:
<?php
set_error_handler(function($errno, $errstr) {
echo "Capture d'erreur: [$errno] $errstr\n";
});
$input = "zz123";
if (!ctype_xdigit($input)) {
trigger_error("Entrez une chaîne non hexadécimale: $input", E_USER_WARNING);
}
echo hexdec($input);
La découverte de journal des exceptions d'entrée aide à localiser la chaîne d'appels.
Encapsuler l'appel hexdec dans une fonction, concevoir des cas de test d'unité pour celui-ci, couvrir les entrées normales, limites et exception, et s'assurer que la fonction est robuste:
<?php
function safeHexDec(string $hex) : int {
if (!ctype_xdigit($hex)) {
throw new InvalidArgumentException("Chaîne hexadécimale illégale: $hex");
}
return hexdec($hex);
}
Ensuite, écrivez le test avec phpunit:
<?php
use PHPUnit\Framework\TestCase;
class HexDecTest extends TestCase {
public function testValidHex() {
$this->assertEquals(26, safeHexDec("1a"));
}
public function testInvalidHex() {
$this->expectException(InvalidArgumentException::class);
safeHexDec("1g");
}
}
Parfois, vous pouvez utiliser des outils en ligne ou de la ligne de commande PRINTF pour effectuer une vérification rapide de l'hexadécimal à décimal pour garantir que les résultats de la sortie PHP sont exacts.
Grâce aux étapes ci-dessus, vous pouvez rapidement localiser les problèmes dans les appels hexdec et éviter les problèmes causés par la conversion de type implicite, une entrée illégale ou une mauvaise logique. Garder la vérification des entrées, la capture du journal et les tests unitaires à l'esprit est la clé pour améliorer la qualité du code et l'efficacité de débogage.
<?php
// Exemple:Appel en toute sécurité hexdec Fonctions de
function safeHexDec(string $hex): int {
if (!ctype_xdigit($hex)) {
throw new InvalidArgumentException("Chaîne hexadécimale illégale: $hex");
}
return hexdec($hex);
}
try {
$value = safeHexDec("1a3f");
echo "Convertir le résultat: $value\n";
} catch (InvalidArgumentException $e) {
echo "erreur: " . $e->getMessage() . "\n";
}
?>