php - 如果声明了stricttype=1,是否需要空条件?
问题描述
我在 PHP 中有类方法,声明了严格类型,它的第一个参数是 XMLWriter(应该生成 XML)。我想知道我是否需要检查它的空条件,或者 PHP 解释甚至检查空指针?我以前每次都这样做,但是 PHP7 和严格类型需要它吗?
谢谢
解决方案
如果声明了stricttype=1,是否需要空条件?
默认情况下,如果可能,PHP 会将错误类型的值强制转换为预期的标量类型。例如,为期望字符串的参数提供整数的函数将获得字符串类型的变量。
严格类型只为标量类型声明定义,对象是复合类型。
所以你不需要担心内部的对象。但是,您需要担心非内部的对象并问自己:
这个参数可以为 NULL 吗?
如果是,那么您需要检查参数的可空性($writer
在这种情况下)
有三种不同的方式来处理可为空的数据类型:
1-将参数的默认值设置为NULL
function foo(XMLWriter $writer = null) ...
然后在方法中检查是否$writer
为空。
2-在参数数据类型中添加一个前导问号符号(PHP +7.1)
function foo (?XMLWriter $writer) ...
注意:与(方法1)不同,这里的参数没有默认值
3- 捕获TypeError
异常 (PHP +7)
class A {
public function foo (XMLWriter $writer) {
}
}
$a = new A;
try {
$a->foo(null);
} catch (TypeError $e) {
// Error handling
}
推荐阅读
- javascript - 将 PDF 文件列表打印到客户的打印机
- python - 在 AWS 上运行 python 脚本的建议
- c# - 在c#中水平附加字符串
- python - 如何将大型 .text 文件合并为一个 .csv?
- python - 如何提取模型的输出?
- javascript - 在对象属性中找到最大的数字
- selenium-webdriver - 从另一个功能调用身份验证功能
- excel - 使用 VBA 从 Excel 引用表格时在 Word 中退出表格时出现问题
- r - 使用 str_detect (或其他一些函数)和某种方式循环遍历列表以本质上执行 vlookup
- laravel - Laravel 后来的方法随机触发电子邮件