php - ?int $number 和 int $number = null 有什么区别?
问题描述
鉴于这个解释
可空类型:参数和返回值的类型声明现在可以通过在类型名称前加上问号来标记为可空。这表示除了指定的类型外,NULL 也可以分别作为参数传递或作为值返回。
以下代码:
public function test(?int $var) {
}
表示test()
可以用$var
asint
或 as调用null
。
以下代码:
public function test(int $var = null) {
}
test()
可以用$var
asint
或null
as well调用的方法。
这两种方法有什么区别?这些中的任何一个都比另一个更高效吗?
解决方案
第一个函数只使用类型声明,这意味着输入参数必须是类型int
or NULL
。
第二个函数同时使用类型声明和默认参数值,这意味着参数必须是类型int
或NULL
但如果省略,它将默认为NULL
.
使用你的第一个函数,如果你只是简单地调用test()
而不传递任何东西,你会得到:
PHP 致命错误:未捕获的 ArgumentCountError:函数 test() 的参数太少 [...]
这是正确的,因为函数期望int
或NULL
但都没有,而对于第二个,因为你已经用默认值定义了参数,它会运行没有错误。
代码
function test(?int $var) {
var_dump($var);
}
function test2(int $var = null) {
var_dump($var);
}
test(1); // fine
test(); // error
test2(1); // fine
test2(); // fine
就性能而言,差异可能可以忽略不计,没有什么大到足以引起关注的地方。
现场示例
推荐阅读
- cassandra - 我需要将所有节点传递给 Cassandra 客户端吗?
- angular - 具有嵌套子组件的角路由结构
- c# - 为什么这个异步代码不能在等待之前的相同上下文中继续?
- c# - LuisService 不会序列化 botframework V4 中 DateTimeV2 实体的所有分辨率值
- android - 从 iFrame / webview 获取事件到父级 - Ionic
- lua - 如何在水族馆/scrapy-splash 中加载 LUA 模块?
- react-native - 解决“TypeError:window.deltaUrlToBlobUrl 不是函数”
- protractor - 如何在表格中测试无限滚动?
- android - 尽管我已按照文档中的步骤操作,但地点选择器(Google 地图)会立即关闭
- javascript - 如何修复未显示在画布中的图像