0

私はphp 8.0を使用していますが、ドキュメントによると、何らかの理由でユニオン型とnull許容型が機能しないようです。?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

ここで何が問題なのですか?

4

1 に答える 1

2

PHP 8 で型ヒントとして使用string|nullすることは、引数がオプションであることを意味するのではなく、null 許容であることを意味します。つまり、null を値 (または明らかに文字列) として渡すことができますが、引数は引き続き必要です。

引数をオプションにしたい場合は、次のようにデフォルト値を指定する必要があります:

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

https://3v4l.org/gXLDHを参照

PHP の以前のバージョンでも同じことが言え、次の?string構文を使用していました。引数は引き続き必要ですが、null は有効な値でした。

于 2020-12-26T16:22:39.463 に答える