PHP에서 Sprintf 함수는 문자열을 형식화하기위한 매우 일반적인 도구입니다. 형식화 된 문자열과 일련의 매개 변수를 허용 한 다음 형식화 된 문자열을 반환합니다. 그러나 실제 사용 중에는 일반적인 실수가 발생할 수 있습니다. 자리 표시 자 수와 매개 변수 수가 일치하지 않습니다. 이 문제는 일반적으로 PHP가 경고를 던지거나 예상되는 것과 일치하지 않는 결과를 반환하게합니다.
Sprintf 함수의 기본 사용은 다음과 같습니다.
sprintf($format, $arg1, $arg2, ...);
그 중 $ 형식은 자리 표시 자 (예 : %s , %d 등)를 포함하는 형식의 문자열이며 $ arg1 , $ arg2 등은 이러한 자리 표시자를 대체 할 실제 매개 변수입니다.
예를 들어 다음 코드 :
$formatted_string = sprintf("Hello %s, you have %d new messages", "John", 5);
echo $formatted_string;
출력 :
Hello John, you have 5 new messages
$ 형식 문자열의 자리 표시 자 수가 실제로 전달 된 매개 변수 수와 일치하지 않을 때 오류 또는 경고가 발생합니다. 예를 들어, 두 자리 표시자를 전달한다고 가정하지만 하나의 매개 변수 만 제공한다고 가정합니다.
$formatted_string = sprintf("Hello %s, you have %d new messages", "John");
이 코드는 다음 오류 또는 경고를 유발합니다.
Warning: sprintf(): Too few arguments in...
이것은 일반적으로 자리 표시 자와 일치하기 위해 충분한 매개 변수를 올바르게 전달하지 않거나 너무 많은 매개 변수를 전달하기 때문입니다.
자리 표시 자 및 매개 변수가 일치하는지 확인하십시오
가장 직접적인 솔루션은 형식으로 된 문자열의 자리 표시 자 수가 전달되는 매개 변수 수와 일치하는지 확인하는 것입니다. 형식 문자열에 두 개의 자리 표시자가있는 경우 두 매개 변수를 전달하십시오.
$formatted_string = sprintf("Hello %s, you have %d new messages", "John", 5);
조건 검사를 사용하여 매개 변수가 유효한지 확인하십시오.
sprintf를 호출하기 전에 func_num_args 와 같은 함수를 통해 들어오는 매개 변수 수를 확인하여 누락되거나 중복되는 매개 변수가 없는지 확인할 수 있습니다.
if (func_num_args() >= 2) {
$formatted_string = sprintf("Hello %s, you have %d new messages", "John", 5);
} else {
echo "Insufficient arguments!";
}
누락 된 매개 변수의 기본값을 설정합니다
형식의 문자열에 일부 매개 변수가 없으면 sprintf를 호출 할 때 기본값을 설정할 수 있습니다. 예를 들어, 매개 변수가 선택 사항이 될 것으로 예상되는 경우 3 원 운영자를 사용하여 처리 할 수 있습니다.
$messages = 5;
$formatted_string = sprintf("Hello %s, you have %d new messages", "John", $messages ?: 0);
@ 연산자를 사용하여 경고를 억제합니다 (권장되지 않음)
경고를 무시하고 코드를 계속 실행하려면 Sprintf 함수 호출 전에 @ Symbol을 사용할 수 있지만 오류를 억제 할 수 있지만 문제를 근본적으로 해결하지 않기 때문에 권장되는 해결 방법이 아닙니다.
@sprintf("Hello %s, you have %d new messages", "John");
참고 : 이 방법은 경고를 제거 할 수 있지만 매개 변수 불일치 문제를 해결하지는 않으며이 관행을 피하는 것이 가장 좋습니다.
디버그 출력
매개 변수 수가 일치하지 않는 이유를 잘 모르면 Sprintf를 호출하기 전에 전달 된 매개 변수를 인쇄하여 문제를 디버깅 할 수 있습니다.
var_dump(func_get_args());
$formatted_string = sprintf("Hello %s, you have %d new messages", "John");
Sprintf 함수는 매우 유용한 도구이지만 형식 문자열의 자리 표시자는 전달 된 매개 변수 수를 엄격하게 일치시켜야합니다. 경고 나 오류를 피하기 위해 다음 방법은 자리 표시 자와 매개 변수 간의 불일치 문제를 해결할 수 있습니다.
자리 표시 자 및 매개 변수가 매개 변수 수와 일치하는지 확인하십시오.
조건 검사를 사용하여 매개 변수의 유효성을 확인하십시오.
누락 된 매개 변수에 대한 기본값을 설정합니다.
@ 기호 억제 오류를 사용하지 마십시오.
이러한 방법을 사용하면 Sprintf를 사용할 때 일반적인 오류를 피하고 코드의 견고성을 향상시킬 수 있습니다.