settype ()는 지정된 유형에 따라 변수를 변환하고 원래 변수 자체를 직접 수정합니다. 구문은 다음과 같습니다.
bool settype(mixed &$var, string $type)
두 가지 매개 변수를받습니다.
$ var : 유형으로 변환 해야하는 변수 (참조를 전달해야 함).
$ 유형 : 대상 유형은 "부울" , "정수" , "플로트" , "문자열" , "배열" , "개체" 또는 "null" 일 수 있습니다.
함수는 변환이 성공했음을 나타내려면 true를 반환하고, 실패를 나타내는 것은 false입니다 .
$val = '';
settype($val, 'integer');
echo $val; // 산출 0
문제 : 빈 문자열이 0으로 변환되어 예상 논리와 일치하지 않을 수 있습니다.
$val = [1, 2, 3];
settype($val, 'string');
echo $val; // 산출 "Array"
문제 : 배열 요소를 문자열로 연결하지는 않지만 문자열 "배열"을 출력합니다.
$val = new stdClass();
settype($val, 'integer');
// 경고를 던져,변환 할 수 없습니다
문제 : 객체와 같은 복잡한 유형은 스칼라로 변환 할 수 없을 때 경고가 발생합니다.
settype ()를 호출하기 전에 변수의 원래 유형이 변환에 적합한 지 확인하십시오.
if (is_string($val)) {
settype($val, 'integer');
}
예상 유형을 충족하는지 확인하려면 사용자 입력 (예 : $ _get , $ _post , $ _request )을 필터링 및 확인하십시오.
$age = $_GET['age'] ?? '';
if (is_numeric($age)) {
settype($age, 'integer');
}
가능하면 코드 가독성 및 보안을 향상시키기 위해 settype () 대신 강력한 변환 연산자를 사용합니다.
$val = (int) $val;
이 방법은 재 할당되지 않는 한 원래 변수의 유형에 영향을 미치지 않으며 디버깅 및 추적이 더 쉽습니다.
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);
}
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 또는 비 인구 값이되지 않도록 할 수 있습니다.