0

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

谢谢

4

2 回答 2

1

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

根据 PHP 手册

默认情况下,如果可能,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
}
于 2020-03-02T01:40:28.373 回答
0

如果您将参数输入为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
于 2020-03-01T15:23:04.143 回答