Php вопросительный знак перед типом

Что делают знаки вопроса перед типами переменных в параметрах?

Я хотел кое-что узнать о них, но я не могу найти их ни в документации PHP, ни в Google. В чем разница между ними?

4 ответа

Вы можете передать значение NULL , если есть параметр типа Nullable (с ? ), или значение того же типа.

Параметры:

function test(?string $parameter1, string $parameter2) < var_dump($parameter1, $parameter2); >test("foo","bar"); test(null,"foo"); test("foo",null); // Uncaught TypeError: Argument 2 passed to test() must be of the type string, null given, 

Тип возврата:

Тип возвращаемого значения функции также может иметь тип NULL и может возвращать null или указанный тип.

function error_func():int < return null ; // Uncaught TypeError: Return value must be of the type integer >function valid_func():?int < return null ; // OK >function valid_int_func():?int < return 2 ; // OK >

Объявления типов для параметров и возвращаемых значений теперь можно пометить как обнуляемые, добавив к имени типа знак вопроса. Это означает, что как и указанный тип, NULL может быть передан в качестве аргумента или возвращен как значение, соответственно.

Параметры с обнуляемым типом не имеют значения по умолчанию. Если опущено, значение по умолчанию не равно нулю и приведет к ошибке:

функция f (? callable $ p) <>
F ( ) ; // недействительным; функция f не имеет значения по умолчанию

Это означает, что аргумент может быть передан как указанный тип или NULL:

Это примерно эквивалентно

 public function (string $parameter1 = null, string $parameter2) <> 

За исключением того, что аргумент все еще требуется, и ошибка будет выдана, если аргумент пропущен.

В частности, в этом контексте требуется второй аргумент, и использование =null сделает первый необязательным, что на самом деле не работает. Конечно, это работает, но я имею в виду, что на самом деле это не делает его необязательным, что является основной целью значений по умолчанию.

public function (?string $parameter1, string $parameter2) <> 

Синтаксически имеет немного больше смысла в этом случае.

Читайте также:  Textarea height 100 javascript

Источник

Что делают знаки вопроса перед типами переменных в параметрах?

Я хотел кое-что узнать о них, но я не могу найти их ни в документации PHP, ни в Google. В чем разница между ними?

4 ответа

Вы можете передать значение NULL , если есть параметр типа Nullable (с ? ), или значение того же типа.

Параметры:

function test(?string $parameter1, string $parameter2) < var_dump($parameter1, $parameter2); >test("foo","bar"); test(null,"foo"); test("foo",null); // Uncaught TypeError: Argument 2 passed to test() must be of the type string, null given, 

Тип возврата:

Тип возвращаемого значения функции также может иметь тип NULL и может возвращать null или указанный тип.

function error_func():int < return null ; // Uncaught TypeError: Return value must be of the type integer >function valid_func():?int < return null ; // OK >function valid_int_func():?int < return 2 ; // OK >

Объявления типов для параметров и возвращаемых значений теперь можно пометить как обнуляемые, добавив к имени типа знак вопроса. Это означает, что как и указанный тип, NULL может быть передан в качестве аргумента или возвращен как значение, соответственно.

Параметры с обнуляемым типом не имеют значения по умолчанию. Если опущено, значение по умолчанию не равно нулю и приведет к ошибке:

функция f (? callable $ p) <>
F ( ) ; // недействительным; функция f не имеет значения по умолчанию

Это означает, что аргумент может быть передан как указанный тип или NULL:

Это примерно эквивалентно

 public function (string $parameter1 = null, string $parameter2) <> 

За исключением того, что аргумент все еще требуется, и ошибка будет выдана, если аргумент пропущен.

В частности, в этом контексте требуется второй аргумент, и использование =null сделает первый необязательным, что на самом деле не работает. Конечно, это работает, но я имею в виду, что на самом деле это не делает его необязательным, что является основной целью значений по умолчанию.

public function (?string $parameter1, string $parameter2) <> 

Синтаксически имеет немного больше смысла в этом случае.

Читайте также:  Select width auto css

Источник

Оцените статью