PHP 7.1 или новее (выпущено 2 декабря 2016 г.)
Вы можете явно объявить переменную 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
.
function foo(Type $t)
это ОЧЕНЬ хорошо; см. Null References: Ошибка в миллиард долларовНачиная с PHP 7.1, доступны обнуляемые типы , так как функции возвращают типы и параметры. Тип
?T
может иметь значения указанного ТипаT
илиnull
.Итак, ваша функция может выглядеть так:
Как только вы сможете работать с PHP 7.1, эта нотация должна быть предпочтительнее
function foo(Type $t = null)
, потому что она по-прежнему заставляет вызывающую сторону явно указывать аргумент для параметра$t
.источник
Пытаться:
Проверьте аргументы функции PHP .
источник
Как уже упоминалось в других ответах, это возможно, только если вы укажете
null
значение по умолчанию.Но самым чистым типобезопасным объектно-ориентированным решением будет NullObject :
Использование:
источник
NullFoo
переопределять абстрактные методы, даже если они не имеют значения (по определениюnull
).if (something is null)
проверок, так как NullObject предназначен для охвата всего поведения несуществующего значения, и любой сторонний соавтор не должен интересоваться, является ли объект не существует (ноль) или нет.