현재 위치: > 최신 기사 목록> settype ()의 유형 불일치 오류를 피하는 방법

settype ()의 유형 불일치 오류를 피하는 방법

gitbox 2025-05-29

1. settype () 의 작동 원리 이해

settype ()는 지정된 유형에 따라 변수를 변환하고 원래 변수 자체를 직접 수정합니다. 구문은 다음과 같습니다.

 bool settype(mixed &$var, string $type)

두 가지 매개 변수를받습니다.

  1. $ var : 유형으로 변환 해야하는 변수 (참조를 전달해야 함).

  2. $ 유형 : 대상 유형은 "부울" , "정수" , "플로트" , "문자열" , "배열" , "개체" 또는 "null" 일 수 있습니다.

함수는 변환이 성공했음을 나타내려면 true를 반환하고, 실패를 나타내는 것은 false입니다 .


2. 일반적인 유형 변환 트랩

1. 빈 문자열에 정수

 $val = '';
settype($val, 'integer');
echo $val; // 산출 0

문제 : 빈 문자열이 0으로 변환되어 예상 논리와 일치하지 않을 수 있습니다.

2. 배열로 문자열

 $val = [1, 2, 3];
settype($val, 'string');
echo $val; // 산출 "Array"

문제 : 배열 요소를 문자열로 연결하지는 않지만 문자열 "배열"을 출력합니다.

3. 정수에 물체

 $val = new stdClass();
settype($val, 'integer');
// 경고를 던져,변환 할 수 없습니다

문제 : 객체와 같은 복잡한 유형은 스칼라로 변환 할 수 없을 때 경고가 발생합니다.


3. 유형 불일치 오류를 피하기위한 전략

1. getType ()를 사용하거나 유형 확인을 위해 _*() 함수입니다

settype ()를 호출하기 전에 변수의 원래 유형이 변환에 적합한 지 확인하십시오.

 if (is_string($val)) {
    settype($val, 'integer');
}

2. 입력 소스의 데이터 구조를 제어하십시오

예상 유형을 충족하는지 확인하려면 사용자 입력 (예 : $ _get , $ _post , $ _request )을 필터링 및 확인하십시오.

 $age = $_GET['age'] ?? '';
if (is_numeric($age)) {
    settype($age, 'integer');
}

3. 유형-안전 대안을 사용하십시오

가능하면 코드 가독성 및 보안을 향상시키기 위해 settype () 대신 강력한 변환 연산자를 사용합니다.

 $val = (int) $val;

이 방법은 재 할당되지 않는 한 원래 변수의 유형에 영향을 미치지 않으며 디버깅 및 추적이 더 쉽습니다.

4. 전환 실패를 처리하기 위해 예외 메커니즘을 사용하십시오

settype () 는 예외를 제외하지 않지만 실패 처리 로직을 늘리기 위해이를 캡슐화 할 수 있습니다.

 function safeSetType(&$var, $type) {
    $validTypes = ['boolean', 'integer', 'float', 'string', 'array', 'object', 'null'];
    if (!in_array($type, $validTypes)) {
        throw new InvalidArgumentException("지원되지 않는 대상 유형:$type");
    }
    return settype($var, $type);
}

4. 실제 시나리오 : URL 매개 변수를 정수로 변환합니다

URL에서 페이징 매개 변수를 얻기 위해 일반적인 시나리오를 고려하십시오.

 $page = $_GET['page'] ?? 1;

if (is_numeric($page)) {
    settype($page, 'integer');
} else {
    $page = 1;
}

$offset = ($page - 1) * 10;

// 다음 으로이 오프셋을 사용하여 데이터베이스 쿼리를 실행하십시오
$url = "https://gitbox.net/api/posts?page=" . $page;

이 예에서는 숫자 여부와 변환 여부를 결정하면 $ PAGE 변수가 예상치 못한 0 또는 비 인구 값이되지 않도록 할 수 있습니다.