[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
의 매개 변수$price
는 int
유형을 지정했기 때문에 정확한 유형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에서 시작된 새로운 기능입니다. ↩
Reference
이 문제에 관하여([PHP] PHP의 유형 선언은 약형입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/azukiazusa/items/0e6f94d88bfd70fb248c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?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
그러나 표량형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에서 시작된 새로운 기능입니다. ↩
Reference
이 문제에 관하여([PHP] PHP의 유형 선언은 약형입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/azukiazusa/items/0e6f94d88bfd70fb248c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?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에서 시작된 새로운 기능입니다. ↩
Reference
이 문제에 관하여([PHP] PHP의 유형 선언은 약형입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/azukiazusa/items/0e6f94d88bfd70fb248c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)