函数的可空类型参数上未捕获的 ArgumentCountError
Uncaught ArgumentCountError on function's nullable type parameter
我正在使用 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 8 中使用 string|null
作为类型提示并不意味着该参数是可选的,只是它可以为空。这意味着您可以将 null 作为值(显然是字符串)传递,但参数仍然是必需的。
如果你想要一个参数是可选的,你需要提供一个默认值,如下:
function test(string $hello, string|null $world = null) {
// ...
}
早期版本的PHP也是如此,使用?string
语法;该参数仍然是必需的,但 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 8 中使用 string|null
作为类型提示并不意味着该参数是可选的,只是它可以为空。这意味着您可以将 null 作为值(显然是字符串)传递,但参数仍然是必需的。
如果你想要一个参数是可选的,你需要提供一个默认值,如下:
function test(string $hello, string|null $world = null) {
// ...
}
早期版本的PHP也是如此,使用?string
语法;该参数仍然是必需的,但 null 是一个有效值。