Uncaught ArgumentCountError для параметра типа, допускающего значение NULL, функции

Я использую php 8.0, но по какой-то причине типы объединения и типы с нулевым значением, похоже, не работают в соответствии с документацией. ?Type или Type|null должны сделать аргумент необязательным в соответствии с документацией (https://www.php.net/manual/en/language.types.declarations.php#language.types.declarations.union)

Но я получаю исключение.

8.0.0
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function test(), 1 passed in /var/www/test/test.php on line 10 and exactly 2 expected in /var/www/test/test.php:4
Stack trace:
#0 /var/www/test/test.php(10): test()
#1 {main}
  thrown in /var/www/test/test.php on line 4

Простой тестовый код

//function test(string $hello, ?string $world) {
function test(string $hello, string|null $world) {
        return $hello . ' ' . ($world ?? 'world');
}

echo phpversion() . PHP_EOL;
// Outputs 8.0.0

echo test('hello') . PHP_EOL;
// Expected output: hello world

echo test('hola','mundo');
// Expected output: hola mundo

Что здесь не так?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
427
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование string|null в качестве подсказки типа в PHP 8 не означает, что аргумент является необязательным, просто он может принимать значение NULL. Это означает, что вы можете передать null как значение (или строку, очевидно), но аргумент по-прежнему требуется.

Если вы хотите, чтобы аргумент был необязательным, вам необходимо указать значение по умолчанию, как показано ниже:

function test(string $hello, string|null $world = null) {
    // ...
}

Смотрите https://3v4l.org/gXLDH

То же самое было и в более ранних версиях PHP, использующих синтаксис ?string; аргумент по-прежнему требовался, но значение null было допустимым.

Другие вопросы по теме