如果声明了 stricttype=1,是否需要 null 条件?
Is null condition needed if stricttype=1 declared?
我在 PHP 中有 class 方法,声明了严格类型,它的第一个参数是 XMLWriter(应该生成 XML)。我想知道我是否需要检查它的空条件,或者 PHP 解释甚至检查空指针?我以前每次都这样做,但是 PHP7 和严格类型需要它吗?
谢谢
如果您将参数类型提示为 XMLWriter
,则不可能将 NULL
传递给该方法。 PHP 7 的 strict_types
声明不影响此行为。
<?php
class Example
{
function foo(XMLWriter $writer)
{}
}
$object = new Example();
$object->foo(null); // TypeError in PHP 7+, fatal error in older versions
Is null condition needed if stricttype=1 declared?
By default,
PHP will coerce values of the wrong type into the
expected scalar type if possible. For example, a function that is
given an integer for a parameter that expects a string will get a
variable of type string.
严格类型仅定义为标量类型声明,对象是复合类型。
所以你不需要担心内部对象。但是,您需要担心非内部对象并问问自己:
这个参数可以为NULL吗?
如果是,那么您需要检查参数的可空性(在本例中为$writer
)
可以通过三种不同的方式处理可为空的数据类型:
1-设置参数默认值为NULL
function foo(XMLWriter $writer = null) ...
然后在方法中检查 $writer
是否为空。
2-在参数数据类型前加一个问号符号(PHP+7.1)
function foo (?XMLWriter $writer) ...
Note: unlike (method 1) the parameter here does not have a default value
3-捕获TypeError
异常(PHP+7)
class A {
public function foo (XMLWriter $writer) {
}
}
$a = new A;
try {
$a->foo(null);
} catch (TypeError $e) {
// Error handling
}
我在 PHP 中有 class 方法,声明了严格类型,它的第一个参数是 XMLWriter(应该生成 XML)。我想知道我是否需要检查它的空条件,或者 PHP 解释甚至检查空指针?我以前每次都这样做,但是 PHP7 和严格类型需要它吗?
谢谢
如果您将参数类型提示为 XMLWriter
,则不可能将 NULL
传递给该方法。 PHP 7 的 strict_types
声明不影响此行为。
<?php
class Example
{
function foo(XMLWriter $writer)
{}
}
$object = new Example();
$object->foo(null); // TypeError in PHP 7+, fatal error in older versions
Is null condition needed if stricttype=1 declared?
By default, PHP will coerce values of the wrong type into the expected scalar type if possible. For example, a function that is given an integer for a parameter that expects a string will get a variable of type string.
严格类型仅定义为标量类型声明,对象是复合类型。
所以你不需要担心内部对象。但是,您需要担心非内部对象并问问自己:
这个参数可以为NULL吗?
如果是,那么您需要检查参数的可空性(在本例中为$writer
)
可以通过三种不同的方式处理可为空的数据类型:
1-设置参数默认值为NULL
function foo(XMLWriter $writer = null) ...
然后在方法中检查 $writer
是否为空。
2-在参数数据类型前加一个问号符号(PHP+7.1)
function foo (?XMLWriter $writer) ...
Note: unlike (method 1) the parameter here does not have a default value
3-捕获TypeError
异常(PHP+7)
class A {
public function foo (XMLWriter $writer) {
}
}
$a = new A;
try {
$a->foo(null);
} catch (TypeError $e) {
// Error handling
}