如果声明了stricttype=1,是否需要null条件



我在PHP中有一个类方法,声明了严格类型,它的第一个参数是XMLWriter(应该生成XML(。我想知道我是否需要检查它的null条件,或者PHP解释检查甚至null指针?我以前每次都这样做,但PHP7和严格类型需要它吗?

感谢

如果声明了stricttype=1,是否需要null条件?

根据PHP手册

默认情况下,PHP会将错误类型的值强制到如果可能,应为标量类型。例如为期望字符串的参数给定一个整数,将得到字符串类型的变量。

严格类型仅为标量类型声明定义,对象是复合类型TR

因此,您不需要担心内部对象。然而,你需要担心非内部的对象,并问问自己:

这个参数可以为NULL吗

如果是,则需要检查参数的可空性(在本例中为$writer(


有三种不同的方法来处理可为null的数据类型:

1-将参数的默认值设置为NULL

function foo(XMLWriter $writer = null) ...

然后在方法中检查$writer是否为null。


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
}

如果将参数键入为XMLWriter,则不可能将NULL传递给该方法。PHP7的strict_types声明不会影响这种行为。

<?php
class Example
{
function foo(XMLWriter $writer)
{}
}
$object = new Example();
$object->foo(null); // TypeError in PHP 7+, fatal error in older versions

相关内容

  • 没有找到相关文章

最新更新