Невозможно использовать null в качестве значения по умолчанию для параметра в PHP-8
В версиях php-8 и более старых работает следующий код
class Foo {
public function __construct(string $string = null) {}
}
Но в php-8 вместе с продвижением собственности выдает ошибку
class Foo {
public function __construct(private string $string = null) {}
}
Неустранимая ошибка: нельзя использовать null в качестве значения по умолчанию для параметра $string типа string
Хотя создание строки, допускающей значение NULL, работает
class Foo {
public function __construct(private ?string $string = null) {}
}
Так это тоже ошибка или предполагаемое поведение?
2 ответа
См. RFC для продвижения свойств конструктора
... поскольку продвигаемые параметры подразумевают объявление свойства, допустимость значения NULL должна быть явно объявлена и не выводится из значения по умолчанию NULL:
class Test { // Error: Using null default on non-nullable property public function __construct(public Type $prop = null) {} // Correct: Make the type explicitly nullable instead public function __construct(public ?Type $prop = null) {} }
Это не ошибка!
class Foo {
public function __construct(private string $string = null) {}
}
Приведенный выше код представляет собой сокращенный синтаксис для
class Foo {
private string $string = null;
public function __construct(string $string) {
$this->string = $string;
}
}
Что вызывает фатальную ошибку
Неустранимая ошибка: значение по умолчанию для свойства строки типа не может быть нулевым.
Таким образом, вы не можете инициализировать типизированное свойство, не допускающее значения NULL, для
NULL