유형 힌트를 사용할 때 null 인수를 전달할 수 없습니다
다음 코드 :
<?php
class Type {
}
function foo(Type $t) {
}
foo(null);
?>
런타임에 실패했습니다.
PHP Fatal error: Argument 1 passed to foo() must not be null
다른 언어처럼 null을 전달할 수없는 이유는 무엇입니까?
PHP 7.1 이상 (2016 년 12 월 2 일 릴리스)
null
이 구문 을 사용하도록 변수를 명시 적으로 선언 할 수 있습니다
function foo(?Type $t) {
}
이 결과
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
따라서 선택적 인수를 원한다면 규칙을 따를 수 Type $t = null
있지만 인수 null
와 유형을 모두 허용하도록 하려면 위의 예를 따르십시오.
PHP 7.0 이상
당신은 같은 기본값을 추가해야합니다
function foo(Type $t = null) {
}
그렇게하면 null 값을 전달할 수 있습니다.
이것은 유형 선언 에 대한 매뉴얼 섹션에 설명되어 있습니다 .
NULL
매개 변수의 기본값이로 설정된 경우 값 을 승인하도록 선언 할 수 있습니다NULL
.
PHP 7.1부터는 함수 반환 형식과 매개 변수로 nullable 형식 을 사용할 수 있습니다. 형식 ?T
은 지정된 Type T
또는의 값을 가질 수 있습니다 null
.
따라서 함수는 다음과 같습니다.
function foo(?Type $t)
{
}
PHP 7.1로 작업 할 수있게되면,이 표기법은 function foo(Type $t = null)
호출자가 매개 변수에 대한 인수를 명시 적으로 지정하도록 강제하기 때문에이 표시법이 선호 됩니다 $t
.
시험:
function foo(Type $t = null) {
}
PHP 함수 인수를 확인하십시오 .
다른 답변에서 이미 언급했듯이 null
기본값으로 지정 하는 경우에만 가능 합니다.
그러나 가장 안전한 유형 안전 객체 지향 솔루션은 NullObject입니다 .
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
용법:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
참고 URL : https://stackoverflow.com/questions/14584145/cannot-pass-null-argument-when-using-type-hinting
'Programing' 카테고리의 다른 글
kotlin 문자열 템플릿의 형식 (0) | 2020.06.05 |
---|---|
커맨드 라인에서 mysql 원격 데이터베이스에 액세스 (0) | 2020.06.05 |
Android 디자인 지원 라이브러리 확장 가능 부동 작업 버튼 (FAB) 메뉴 (0) | 2020.06.05 |
vim에서 HTML 태그 사이에 텍스트를 삭제 하시겠습니까? (0) | 2020.06.05 |
Pandas의 join과 merge의 차이점은 무엇입니까? (0) | 2020.06.05 |