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 st.php

int(7)
BASH


원인은 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