답변:
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
.
function foo(Type $t)
는 null을 전달할 수 없다는 사실 은 매우 좋습니다. 참조 널 참조를 : 억 달러 실수를
PHP 7.1부터는 함수 반환 형식과 매개 변수로 nullable 형식 을 사용할 수 있습니다. 형식 ?T
은 지정된 Type T
또는의 값을 가질 수 있습니다 null
.
따라서 함수는 다음과 같습니다.
function foo(?Type $t)
{
}
PHP 7.1로 작업 할 수있게 되 자마자이 표기법이 function foo(Type $t = null)
호출자가 매개 변수에 대한 인수를 명시 적으로 지정하도록 강제하기 때문에이$t
.
다른 답변에서 이미 언급했듯이 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);
NullFoo
방법을 사용하면 (의 정의에 따라 null
) 의미가없는 추상 메소드를 대체 할 수 있습니다 .
if (something is null)
존재하지 않는 값의 모든 동작을 다루기 때문에 외부의 공동 작업자가 오브젝트가 존재하지 않거나 (널) 존재하지 않습니다.