Hexdec은 문자열 형태의 16 진수를 입력으로 만 허용합니다. 비 스트링 유형이 전달되면 PHP는 먼저 자동으로 변환되지만 결과에 대한 예외가 발생할 수 있습니다. 예를 들어:
<?php
// 올바른 사용법,문자열 입력
echo hexdec("1a"); // 산출 26
// 디지털 입력,자동으로 문자열로 변환합니다 "26"
echo hexdec(26); // 산출 38,왜냐하면 26 문자열로 취급됩니다 "26" 거래하십시오
이 자동 유형 변환이 발생할 수있는 오해에주의하십시오. 입력 파라미터 유형이 디버깅의 첫 단계인지 확인하십시오.
여러 번, Hexdec은 입력 자체가 잘못 되었기 때문에 기대치를 충족시키지 못하는 결과를 반환합니다. 현재 호출하기 전에 데이터를 인쇄하고 입력 컨텐츠를 확인할 수 있습니다.
<?php
$hexString = "1g"; // 불법 인물 g
if (!ctype_xdigit($hexString)) {
echo "입력 문자열에는 비 헬픽 문자가 포함되어 있습니다: $hexString\n";
}
echo hexdec($hexString); // 산출 1,왜냐하면遇到불법 인물后停止转换
문자열이 16 진수로 합법적인지 여부를 감지하기 위해 ctype_xdigit () 함수를 사용하는 것이 좋은 습관입니다.
phpstorm과 같은 최신 IDE를 사용하는 경우 브레이크 포인트를 설정하고 프로그램의 단계별 디버깅을하고 변수가 HEXDEC 로 전달되기 전후 변경 사항을 관찰하는 것이 좋습니다. 가변 유형과 값의 실시간 모니터링을 통해 예기치 않은 입력 또는 데이터 오염을 발견하는 데 도움이 될 수 있습니다.
HEXDEC은 예외를 제외하지 않지만 PHP의 오류 로그 및 예외 처리 메커니즘을 사용하여 다음과 같은 호출 지점 주위에 일부 보안 코드를 작성할 수 있습니다.
<?php
set_error_handler(function($errno, $errstr) {
echo "오류 캡처: [$errno] $errstr\n";
});
$input = "zz123";
if (!ctype_xdigit($input)) {
trigger_error("비 혈소성 문자열을 입력하십시오: $input", E_USER_WARNING);
}
echo hexdec($input);
입력 예외의 로그 검색은 통화 체인을 찾는 데 도움이됩니다.
HEXDEC 호출을 함수로 캡슐화하고, 설계 단위 테스트 케이스, 정상, 경계 및 예외 입력을 커버하고 기능이 강력한 지 확인하십시오.
<?php
function safeHexDec(string $hex) : int {
if (!ctype_xdigit($hex)) {
throw new InvalidArgumentException("불법 16 진수 문자열: $hex");
}
return hexdec($hex);
}
그런 다음 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");
}
}
때로는 온라인 도구 또는 명령 줄 printf를 사용하여 PHP 출력 결과가 정확한지 확인하기 위해 16 진수에서 10 진수를 빠르게 확인할 수 있습니다.
위의 단계를 통해 HEXDEC 통화에서 문제를 신속하게 찾아 내고 암시 적 유형 변환, 불법 입력 또는 잘못된 논리로 인한 문제를 피할 수 있습니다. 입력 점검, 로그 캡처 및 장치 테스트를 염두에 두는 것이 코드 품질을 개선하고 효율성을 디버깅하는 데 핵심입니다.
<?php
// 예:안전한 전화 hexdec 의 기능
function safeHexDec(string $hex): int {
if (!ctype_xdigit($hex)) {
throw new InvalidArgumentException("불법 16 진수 문자열: $hex");
}
return hexdec($hex);
}
try {
$value = safeHexDec("1a3f");
echo "결과를 변환합니다: $value\n";
} catch (InvalidArgumentException $e) {
echo "실수: " . $e->getMessage() . "\n";
}
?>