最新的前提条件测试?

Up-to-date pre-condition testing?

我正在测试脚本上给定的 post 请求字段,该脚本可以从命令行调用,也可以通过 HTTP 作为 GET 或 POST 请求调用。因此,$_POST 可以是未定义的。有没有一种简单的方法可以重写这个语句?

if (isset($_POST) && isset($_POST['function']) && $_POST['function'] == "login"):

我可以用 @-operator 抑制错误——这是不好的做法吗?

if (@$_POST['function'] == "login"):

我可以使用 PHP 7.0 的空合并运算符,但这引入了一个无用的文字,纯粹是为了抛出 false:

if (($_POST['function'] ?? null) == "login"):

如果有帮助,您不需要同时进行 isset() 测试:

if (isset($_POST['function']) && $_POST['function'] == "login"):

如果未设置 $_POST 将正常工作。例如:

php > var_dump(isset($notset[123][456]));
bool(false)
php >

我还认为您对空合并运算符的使用是正确且干净的。

if (($_POST['function'] ?? null) == "login"):

这对我来说很棒。

您还可以将此逻辑抽象到某种类型的包装函数后面:

function getFunction()
{
    return ($_POST['function'] ?? null);
}

或者,对于年龄较大的 PHP:

function getFunction()
{
    return isset($_POST['function']) ? $_POST['function'] : null);
}