PHP 7 의 스칼라 타입
PHP 7 부터는 int, float, string, bool 4 가지 스칼라 타입에 대해 함수의 파라미터 타입을 선언할 수 있습니다.
즉 다음과 같이 function 을 정의할 수 있습니다.
st.php
<?php
function sum(int $a, int $b)
{
return $a + $b;
}
var_dump(sum('3', 4.1));
PHP
이제 php 코드를 실행하면 다음과 같이 의도하지 않은 결과가 나오게 됩니다.
원인은 PHP의 기본 모드는 타입 검사를 엄격하게 하지 않아서 위 코드는 정상적으로 실행이 되고 첫번째 파라미터인 string '3' 은 int 3, 두번째 파라미터인 float 4.1 은 int 4 로 변환되어 7 이라는 결과가 나옵니다.
이는 개발자가 원하는 결과가 아니며 심각한 버그를 만들 소지가 있으므로 PHP 7 에서는 엄격한 스칼라 타입 검사 기능을 같이 제공하고 있습니다.
위 코드를 아래와 같이 declare(strict_types = 1); 를 사용해서 엄격하게 스칼라 타입을 검사하도록 구현하면 실행시 의도한 대로 에러가 발생합니다.
st.php
<?php declare(strict_types = 1);
function sum(int $a, int $b)
{
return $a + $b;
}
var_dump(sum('3', 4.1));
PHP
$ php st.php
int(7)
PHP Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, string given, called in /home/ec2-user/st.php on line 9 and defined in /home/ec2-user/st.php:4
Stack trace:
#0 /home/ec2-user/st.php(9): sum('3', 4.1)
#1 {main}
thrown in st.php on line 4
BASH
같이 보기
Ref