[PHP] PHP의 유형 선언은 약형입니다.

6875 단어 PHP

유형 선언


다음 예에서 보듯이 함수에 매개변수를 제공하는 것과 같은 매개변수 유형을 제한할 수 있습니다.
잘못된 유형을 납품하면 발생Fatal error합니다.
<?php
function includeTax(int $price, bool $take_out = true) {
    if ($take_out) {
        return $price * 1.08;
    } else {
        return $price * 1.1;
    }
}

includeTax(100, false); // 100
includeTax('税抜100円', false); // Fatal error: Uncaught TypeError: Argument 1 passed to includeTax() must be of the type int, string given
상기 함수inculdeTax의 매개 변수$priceint 유형을 지정했기 때문에 정확한 유형100을 성공적으로 전달했지만 string税抜100円에 전달할 때 오류가 발생할 수 있습니다.
유형으로 유효한 유형을 설명하는 것은 다음과 같다.

참조 PHP 설명서 > 언어 참조 > 함수 > 유형 설명

PHP의 유형 선언은 엄격하지 않습니다.


그러나 표량형1의 유형선언에는 함정이 있다.
표량형의 유형 성명은 약한 유형입니다. 일치하지 않는 유형이 파라미터와 일치하지 않으면 스텔스 변환.
구체적으로 말하면 다음과 같은 예의 예이다.
<?php
function includeTax(int $price, bool $take_out = true) {
    // $priceは(int)100に変換される。
    if ($take_out) {
        return $price * 1.08;
    } else {
        return $price * 1.1;
    }
}

// string型で渡す。
includeTax('100', false); // 100
// float型で渡す。
includeTax(100.5, false); // 100
둘 다 int형으로 변환할 수 있는 형식이어서 함수에 맡길 때 묵묵히 int형으로 변환해 처리했다.
특히 후자의float형으로 납품할 때 개발자는110.55의 반환을 기대하지만 다른 결과가 돌아오는 것에 대해 곤혹스러울 수 있다.
반환 값의 형식 성명과 속성 형식 지정 2 에도 이 행위가 있습니다.

비고정 모델 비활성화하기


엄격한 금형을 원할 때 파일 첫머리에 declare(strict_types = 1).
<?php
declare(strict_types = 1);

function includeTax(int $price, bool $take_out = true) {
    if ($take_out) {
        return $price * 1.08;
    } else {
        return $price * 1.1;
    }
}

includeTax('100', false); // Uncaught TypeError: Argument 1 passed to includeTax() must be of the type int, string given
includeTax(100.5, false); // Uncaught TypeError: Argument 1 passed to includeTax() must be of the type int, string given
그러나 이런 엄격한 모델은 전체에 적합하지 않다.엄격하게 포맷하고자 하는 모든 문서에 대해 선언을 해야 한다.

참고 문헌


PHP 브로셔
첫 번째 PHP
[영입 결정!]PHP7로 구현한 표량형 선언은?
논리 값(boolean) 정수(integer) 부동 소수점 값(flat, double) 문자열(string)의 4가지. 
속성형 지정은 7.4에서 시작된 새로운 기능입니다. 

좋은 웹페이지 즐겨찾기