PHP 可空类型和函数参数

Fry*_*Pan 6 php parameters nullable function

我想问一下两者是否相同,如果不同的话,它们之间的区别在哪里:

/**
 * @param int|null $id Any id.
 */
public function testSomething(int $id = null) {}
Run Code Online (Sandbox Code Playgroud)

/**
 * @param int|null $id Any id.
 */
public function testSomething(?int $id) {}
Run Code Online (Sandbox Code Playgroud)

谢谢您的回答!

小智 5

这不一样。第一个函数声明:

public function testSomething(int $id = null) {}
Run Code Online (Sandbox Code Playgroud)

如果调用不带参数的函数,则将默认值设置为 null。

第二个定义:

public function testSomething(?int $id) {}
Run Code Online (Sandbox Code Playgroud)

将接受空值作为第一个参数,但如果参数丢失,则不会将其设置为默认值。因此,如果您以第二种方式调用该函数,则始终需要有一个参数。