Что делают знаки вопроса перед типами переменных в параметрах?
Я хотел кое-что узнать о них, но я не могу найти их ни в документации 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) <>
Синтаксически имеет немного больше смысла в этом случае.
Что делают знаки вопроса перед типами переменных в параметрах?
Я хотел кое-что узнать о них, но я не могу найти их ни в документации 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) <>
Синтаксически имеет немного больше смысла в этом случае.