Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP TypeError 완벽 정리: 타입 오류의 발생 원인과 예외 처리 방법

PHP TypeError란 무엇인가?

TypeError 클래스는 PHP의 Error 클래스를 상속하는 내장 클래스로, 주로 다음과 같은 상황에서 발생합니다.

  • 함수에 전달된 실제 인수의 타입이 선언된 매개변수(형식 인수)의 타입과 일치하지 않을 때
  • 함수가 반환하는 값이 선언된 반환 타입과 일치하지 않을 때
  • PHP 내장 함수에 유효하지 않은 인수나 잘못된 개수의 인수가 전달될 때

참고로, 엄격한 타입 검사(strict typing)를 적용하려면 스크립트 최상단에서 declare() 구문을 사용하여 strict_types를 활성화해야 합니다.

예제 1: 매개변수 타입 불일치

아래 예제에서는 함수의 형식 매개변수는 정수(int)로 선언되어 있지만, 실제로는 문자열이 전달되어 TypeError가 발생합니다.

<?php
function add(int $first, int $second){
    echo "addition: " . $first + second;
}
try {
    add('first', 'second');
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

출력 결과

Argument 1 passed to add() must be of the type integer, string given, called in C:\xampp\php\test.php on line 9

예제 2: 반환 타입 불일치

다음 예제에서는 사용자 정의 함수가 정수(integer)를 반환하도록 선언되었지만, 실제로는 배열(array)을 반환하고 있어 TypeError가 발생합니다.

<?php
function myfunction(int $first, int $second): int{
    return array($first,$second);
}
try {
    $val=myfunction(10, 20);
    echo "returned data : ". $val;
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

실행 결과는 다음과 같습니다.

출력 결과

Return value of myfunction() must be of the type integer, array returned

예제 3: 내장 함수에 잘못된 인수 개수 전달

TypeError는 PHP 내장 함수에 잘못된 개수의 인수가 전달될 때도 발생합니다. 단, 이 경우에는 스크립트 시작 부분에 strict_types=1 지시문이 반드시 설정되어 있어야 합니다.

<?php
declare(strict_types=1);
try{
    echo pow(100,2,3);
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

pow() 함수는 정확히 2개의 인수만 받도록 정의되어 있는데, 위 코드에서는 3개의 인수를 전달했기 때문에 오류가 발생합니다.

출력 결과

pow() expects exactly 2 parameters, 3 given

정리

TypeError는 PHP에서 타입 관련 규칙이 위반되었을 때 발생하는 오류입니다. declare(strict_types=1)을 통해 엄격한 타입 검사를 활성화하고, try-catch 블록으로 TypeError를 포착하면 프로그램이 갑자기 중단되는 것을 방지하고 의미 있는 오류 메시지를 출력할 수 있습니다.