본문 바로가기

개발/Web

PHP 7 엄격한 타이핑 (strict mode)

PHP 에서 "declare(strict_types = 1);" 지시문은 엄격한 타입 체크 모드를 활성화합니다.

Strict 모드에서는 정확한 유형의 변수만 허용되며 정확하지 않은 유형일 경우 TypeError 가 발생합니다.

 

기본적으로 PHP는 약한 타입 체크 모드에서 작동하며 가능한 경우 다른 유형의 값을 예상되는 유형으로 캐스팅하여 처리합니다.

예를 들어 다음의 경우 정수를 문자열로 변환이 가능하여 문자열을 예상하는 함수는 정수 인수를 사용하여 호출할 수 있습니다.

<?php

function getString(string $str) {
 var_dump($str);
}

$int = 12;
getString($int);
//string(2) "12"

위 코드의 경우 엄격한 타이핑이 없을 경우 정수 12를 string 형태의 "12"로 변경합니다.

엄격한 타이핑 모드에서는 유형 선언이 정확한 변수만 허용하고 이외의 경우에는 TypeError 가 발생합니다.

 

strict mode의 유일한 예외는 float를 예상하는 함수에 정수가 주어질 수 있다는 것입니다.(에러가 발생하지 않음)

내부 함수 내의 호출은 strict_types의 영향을 받지 않습니다.

 

strict mode의 엄격한 타이핑 활성화 상태로 위 예제를 실행 시 다음과 같은 에러가 발생합니다.

<?php

declare(strict_types = 1);

function getString(string $str) {
 var_dump($str);
}

$int = 12;
getString($int);

//Fatal error: Uncaught TypeError: Argument 1 passed to getString() must be of the type string, integer given...

 

"declare(strict_types = 1);" 은 코드의 첫번째 줄에서 사용해야 하며 그렇지 않을 경우 컴파일 오류가 발생합니다. 

또한 사용하고자 하는 각 파일의 상단에 선언해야 사용이 가능합니다.

 

# 참고자료

www.brainbell.com/php/strict-type.html

반응형