Обьявление типа null

ivanov77

Новичок
Приветствую.
Не могу понять что они имеют ввиду тут в документации ?
null не использовать в качестве значения по умолчанию? Но это ж нужный функционал.
Запишешь без него
function f(?C $c)
придется null явно передавать.

так как в объявление типа нужно будет добавить тип null.
Тут они про обьявление типа потомка?
И сигнатуры поэтому станут отличаться.

Т.е. сразу надо делать ? , на это они намекают?
function f(?C $c = null)
 

weregod

unserializer
Замечу следующее, по крайней мере с 8-ки
PHP:
function foo(): null
{
    return;
}
фаталит
 

WMix

герр M:)ller
Партнер клуба
null не использовать в качестве значения по умолчанию? Но это ж нужный функционал.
спорный вопрос, в тот момент, когда значение либо обьект либо null, то обязательно придется писать if


конкретно по линку намекают на это
PHP:
<?php
abstract class A{
    abstract function foo(int $x = null);
}

class B extends A{
    function foo(int $x){
        return ++$x;
    }
}

// Fatal error: Declaration of B::foo(int $x) must be compatible with A::foo(?int $x = null)
Замечу следующее, по крайней мере с 8-ки
PHP:
function foo(): null
{
    return;
}
фаталит
лучше так
PHP:
function foo(): void{}
 
Последнее редактирование:

ivanov77

Новичок
abstract class A{ abstract function foo(int $x = null); } class B extends A{ function foo(int $x){ return ++$x; } }
Они там про смену значения по умолчанию.
И что "так как в объявление типа нужно будет добавить тип null "(с).
Добавил этот "?" в класс В.
Смотрю так не выдает ошибки:

Код:
abstract class A{
    abstract function foo(int $x = null);
}

class B extends A{
    function foo(?int $x=5){
        return ++$x;
    }
}
 

WMix

герр M:)ller
Партнер клуба
вот и получается, что сигнатура на первый взгляд разная. это путает
 

AmdY

Пью пиво
Команда форума
function foo(?string $a) {}
это значит что в функцию нужно обязательно передавать передавать аргумент, но он может быть нулл. foo(NULL)
function foo(string $a = null) {} - это значит что в функцию не обязательно передавать аргумент. foo(). при этом дефолтное значение null неявно расширяет тип до foo(?string $a = null)

Сам недавно с таким столкнулся, когда cs fixer начал убирать ?
было foo(?string $a = null) стало foo(string $a = null)
 
Сверху