Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP 7의 유형 힌트


PHP 7은 스칼라 유형 선언과 반환 유형 선언에서 두 가지 유형의 힌트를 사용합니다. -

  • 약한 유형 힌트
  • 엄격한 유형 힌트

약한 유형 힌트

기본적으로 PHP 7은 약한 유형 검사 모드에서 작동합니다. 약한 유형 검사는 오류나 치명적인 오류를 제공하지 않습니다. 유형 선언 불일치가 발생하면 오류를 던지지 않고 단순히 코드를 실행합니다.

strict_typesdeclare()를 사용하여 약한 유형 검사를 제어할 수 있습니다.

declare(strict_types=0);
//weak type-checking; we should set the strict value = 0

약한 유형 힌트 예제 1

<?php
   $x=10; // integer variable x =10 value
   $y=20.20; // using floating point number y=20.20 value
   function add(int $x, int $y){
      return $x + $y;
   }
   echo add($x, $y);
?>

출력

코드는 다음 출력을 생성합니다 -

30

설명

위의 예에서는 매개변수에 엄격한 값을 사용하지 않습니다. 두 개의 정수 변수 x와 y를 사용했습니다. x=10이고 y는 부동 숫자 20.20을 사용하지만 y는 오류를 생성하지 않습니다. 단순히 출력 정수 값 30을 제공합니다.

예시 2

<?php
   function returnadd(int ...$integers){
      return array_sum($integers);
   }
   var_dump(returnadd(2, '3', 4.1));
?>

출력

위 프로그램의 출력은 -

int(9)

엄격한 유형 힌트

엄격한 유형 힌트는 유형 선언 불일치가 발생할 때 치명적인 오류를 제공합니다. 엄격한 유형 힌팅이 유형 선언의 정확한 유형의 변수를 허용한다고 말할 수 있습니다. 그렇지 않으면 TypeError 불일치가 발생합니다.

엄격한 유형 힌트에서 파일의 첫 번째 문은 선언되어야 합니다(strict_types=1). 그렇지 않으면 컴파일러 오류가 발생합니다. 파일에 지정되지 않은 다른 포함 파일에는 영향을 미치지 않습니다. 즉, 사용되는 특정 파일에만 영향을 미칩니다.

엄격한 유형 힌트 지시문은 완전히 컴파일 타임에 실행되며 런타임에 제어할 수 없습니다.

엄격한 유형 힌트 예제 1

<?php
   declare (strict_types=1);
   function returnadd(float $x , float $y){
      return $x+$y;
   }
   var_dump(returnadd(3.1,2.1)); //output float(5.2)
   var_dump(returnadd(3, "2 days")); //fatal error
?>

출력

위의 엄격한 유형 힌트 프로그램은 -

float(5.2)
Fatal error: Uncaught TypeError: Argument 2 passed to returnadd() must be of the type float, string given, called in C:\xampp\htdocs\gud.php on line 7 and defined in C:\xampp\htdocs\gud.php:3 Stack trace: #0 C:\xampp\htdocs\gud.php(7): returnadd(3, '2 days') #1 {main} thrown in C:\xampp\htdocs\gud.php on line 3

엄격한 유형 힌트 예제 2

<?php
   declare(strict_types=1); // strict mode checking
   $x='1'; // string
   $y=20; //integer number
   function add(int $x, int $y){
      return $x + $y;
   }
   var_dump(add($x, $y));
?>

"치명적인 오류" 출력을 생성합니다.

위의 엄격한 유형 선언 예제에서 strict_type 값을 1로 선언하면 코드는 "치명적인 오류:잡히지 않은 TypeError:add()에 전달된 인수 1은 int 유형이어야 합니다. , 문자열이 주어집니다.”