PHP7은 스칼라 유형을 선언하고 강력한 유형 검사를 설명합니다.

韦小宝
풀어 주다: 2023-03-20 17:26:01
원래의
5486명이 탐색했습니다.

PHP7은 2015년 초에 출시되었으며 점점 더 많은 사람들이 사용하고 있습니다. 이 기사에서는 PHP7이 스칼라 유형을 선언하는 방법과 PHP7이 강력한 유형 검증을 수행하는 방법에 대해 설명합니다. 보세요. 아!

스칼라 유형 선언

PHP는 PHP5.0부터 클래스 및 인터페이스 매개변수 유형 선언을 지원했으며, PHP5.1은 배열을, PHP5.4는 호출 가능을 지원합니다. 이러한 유형 선언을 통해 PHP는 실행 중에 올바른 매개변수를 전달할 수 있으므로 함수 서명에 더 많은 정보가 제공됩니다.

PHP7부터는 int, float, string, bool이 타입 선언으로 인식되어 함수 반환값 타입, 매개변수 타입 선언으로 사용할 수 있습니다

<?php
function sum(int $a,int $b):string {
return $a+$b;
}
var_dump(sum(1,2));
로그인 후 복사

위 코드는 정상적으로 실행됩니다
결과는 string(1) "3 입니다. ", 약한 유형 확인 모드에서 매개변수가 선언된 유형을 따르지 않으면 PHP 규칙에 따라 변환됩니다.

PHP7.1에서는 nullable 유형의 선언 방법을 추가하고 함수 반환 값 유형으로 void를 추가합니다. 반환은 강력한 유형 검사 모드에서 정의됩니다. void 유형의 함수는 null을 반환하더라도 반환 값을 가질 수 없습니다.

declare(strict_types=1);
function returns_one(): void {
return 1; // Fatal error: A void function must not return a value
}
function returns_null(): void {
return null; // Fatal error: A void function must not return a value
}
로그인 후 복사

또한 void는 반환 유형에만 적용 가능하며 매개변수 유형 선언에는 사용할 수 없습니다. 오류가 발생합니다:

function foobar(void $foo) { 
// Fatal error: void cannot be used as a parameter type
}
로그인 후 복사

Nullable 유형 선언

Nullable 유형은 주로 매개변수 유형 선언 및 함수 반환 값 선언에 사용됩니다.

주요 두 가지 형식은 다음과 같습니다.

function answer(): ?int{
return null; //ok
}function answer(): ?int{
return 42; // ok
}
function say(?string $msg) {
if ($msg) {
echo $msg;
}
}
로그인 후 복사

예를 통해 이해하기 쉽습니다. 이는 ? 형식을 사용하여 함수 매개변수의 유형 또는 반환 값이 다음 중 하나임을 나타냅니다. 지정된 유형 또는 null입니다.

이 방법은 인터페이스 함수 정의에도 사용할 수 있습니다.

interface Fooable {
function foo(?Fooable $f);
}
로그인 후 복사

하지만 한 가지 주의할 점이 있습니다. 함수 자체가 매개변수 유형을 정의하고 기본값이 없으면 null을 허용하더라도 생략할 수 없습니다. , 그렇지 않으면 오류가 발생합니다.

는 다음과 같습니다.

function foo_nullable(?Bar $bar) {}foo_nullable(new Bar); // 可行
foo_nullable(null); // 可行
foo_nullable(); // 不可行
로그인 후 복사

그러나 위 함수의 매개변수를 ?Bar $bar = null 형식으로 정의하면 세 번째 작성 방법도 가능합니다. = null은 실제로 ?의 상위 집합과 동일하므로 null 허용 유형의 매개 변수에 대한 기본값으로 null을 설정할 수 있습니다.

클래스 함수의 반환 유형 선언은 하위 클래스에 의해 재정의될 수 없습니다. 그렇지 않으면 오류가 발생합니다:

class Foo
{
public function bar(): void {
}
}class Foobar extends Foo
{
public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void
}
}
로그인 후 복사

Strict verify mode
strict_types/declare() directive

기본적으로 모든 PHP 파일은 약한 유형입니다. 검증 테스트 모드. 새로운 선언 지시문은 strict_types(1 또는 0)의 값을 지정합니다. 1은 함수 호출 및 return 문에 적용되는 엄격한 유형 검사 모드를 나타내고, 0은 약한 유형 검사 모드를 나타냅니다.

declare(strict_types=1)은 파일의 첫 번째 문이어야 합니다. 이 명령문이 파일의 다른 곳에 나타나면 컴파일 오류가 발생하고 블록 모드가 명시적으로 금지됩니다.

인코딩 지시어와 비슷하지만 틱 지시어와는 다릅니다. strict_types 지시어는 지정된 파일에만 영향을 미치며 포함된 다른 파일에는 영향을 미치지 않습니다(include 등을 통해). 이 지시문은 런타임에 컴파일되며 수정할 수 없습니다. 작동 방식은 함수 호출과 반환 유형 검사가 유형 제약 조건을 준수하도록 opcode에 플래그를 설정하는 것입니다.

<?php
declare(strict_types=1);
function sum(int $a,int $b):string {
return $a+$b;
}
var_dump(sum(1,2));
로그인 후 복사

위 코드는 함수 반환 값유형 선언을 따르지 않아 TypeError가 발생합니다

<?php
declare(strict_types=1);
function sum(string $a,string $b):string {
return $a+$b;
}
var_dump(sum(1,2));
로그인 후 복사

위 코드는 함수의 매개변수 유형 선언을 따르지 않으며 오류도 발생합니다

거기 예외입니다. 광범위한 유형 변환을 사용하면 int가 float가 될 수 있습니다. 즉, 매개변수가 float 유형으로 선언된 경우에도 int 매개변수를 허용할 수 있습니다.

<?php
declare(strict_types=1);
function sum(int $a,int $b):float {
return $a+$b;
}
var_dump(sum(1,2));
로그인 후 복사

위 코드는 정상적으로 실행됩니다

이 시나리오에서는 float를 허용하도록 정의된 함수에 int 매개변수를 전달하고 이 매개변수는 float로 변환됩니다. 이외의 변환은 허용되지 않습니다.

관련 추천 :

PHP7.2 버전 성능 소개

위 내용은 PHP7은 스칼라 유형을 선언하고 강력한 유형 검사를 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!