PHP에서 Ceil () 함수는 부동 소수점 번호를 반올림하고 매개 변수보다 작지 않은 다음 정수를 반환하는 데 사용됩니다. 그러나 Ceil ()를 사용할 때 많은 개발자가 하나의 전제를 무시할 수 있습니다. 통과 된 사람이 문자열 배열, 부울 또는 비 언어 문자열과 같은 비 숫자 유형 인 경우 Ceil ()은 오류를보고하거나 예측할 수없는 결과를 반환 할 수 있습니다.
이 기사는 CEIL ()가 처리 할 수없는 비 숫자 유형을 만날 때 문제를 우아하게 해결하는 방법을 살펴 봅니다.
echo ceil(4.3); // 산출 5
echo ceil(9.999); // 산출 10
그렇습니다. 정상적인 상황에서는 그 행동이 매우 직접적입니다. 그러나 다음 예를 살펴 보겠습니다.
echo ceil("abc"); // Warning: A non-numeric value encountered
현재 PHP는 경고를 던지고 우리가 기대하는 결과를 반환하지 않습니다.
이 문제를 해결하는 열쇠는 유형 확인 및 변환 에 있습니다. IS_NUMERIC () 함수를 사용하여 변수가 숫자 유형인지 확인할 수 있습니다.
$value = "abc";
if (is_numeric($value)) {
echo ceil($value);
} else {
echo "입력 값은 유효한 숫자 값이 아닙니다。";
}
이 방법은 가장 안전하며 유효하지 않은 입력을 효과적으로 방지 할 수 있습니다.
경우에 따라 Ceil ()을 시도하기 전에 값을 입력 할 수 있습니다. 예를 들어, 문자열 형식으로 숫자를받습니다.
$value = "15.7";
if (is_numeric($value)) {
$value = (float) $value;
echo ceil($value); // 산출 16
} else {
echo "법적 번호를 입력하십시오";
}
이 방법은 사용자 입력 및 API 반환과 같은 불확실한 데이터 소스에 적합합니다.
여러 곳에서 반복 판단 논리를 피하기 위해이를 도구 기능으로 캡슐화 할 수 있습니다.
function safe_ceil($input) {
if (is_numeric($input)) {
return ceil((float) $input);
} else {
// 로그인하도록 선택할 수 있습니다、예외를 던지거나 기본값을 반환하십시오
return null;
}
}
// 예:
echo safe_ceil("9.3"); // 산출 10
echo safe_ceil("invalid"); // 산출 null
이렇게하면 Safe_ceil ()을 안전하게 사용하여 프로젝트 전체에서 기본 CEIL () 기능을 대체 할 수 있습니다.
전자 상거래 시스템을 개발하고 있으며 제품 가격에 따라화물 수준을 동적으로 계산해야한다고 가정 해 봅시다. 가격 데이터는 외부 인터페이스에서 나올 수 있으며 때로는 형식이 표준화되지 않습니다.
$price = get_product_price_from_api(); // 예返回:"29.9원"
$price = preg_replace('/[^0-9.]/', '', $price); // 디지털 부분을 추출하십시오
if (is_numeric($price)) {
$shippingLevel = ceil((float)$price / 10);
echo "배송 수준: " . $shippingLevel;
} else {
echo "제품의 가격을 식별 할 수 없습니다";
}
이 시나리오에서는 입력 데이터의 청소가 핵심입니다.
이전 버전의 PHP에서는 불법 유형을 통과하면 경고를 던지지 않고 오류 결과를 조용히 반환합니다. 이러한 유형의 문제를 방지하려면 PHP의 엄격한 유형 선언 및 오류보고 기능을 사용하는 것이 좋습니다.
declare(strict_types=1);
error_reporting(E_ALL);
ini_set('display_errors', '1');
이를 통해 시스템이 온라인 상태 인 후에 만 예외가 아니라 가능한 한 빨리 잠재적 인 문제를 감지 할 수 있습니다.
Ceil () 은 단순하지만 일반적으로 사용되는 기능이지만 뒤에 숨겨진 유형 처리 문제는 무시할 수 없습니다. 합리적인 판단, 변환 및 캡슐화를 통해 코드를보다 강력하고 안전하게 만들 수 있으며 잠재적 인 런타임 오류를 줄일 수 있습니다. 특히 사용자 또는 외부 시스템에서 데이터를 처리 할 때 Ceil () 과 같은 유형에 민감한 기능으로 직접 전달하지 말고 먼저 확인한 다음 사용하십시오.