Php If语句评估和最佳实践

Php If语句评估和最佳实践,php,if-statement,Php,If Statement,在此代码中,变量$controller已初始化并使用(代码来自Prestashop v1.6) 在这个if块中,什么是不正确的?如何评估该区块 这被认为是最佳实践吗?将其改写为: $controller = Tools::getValue('controller'); $current_index = 'index.php'.(($controller) ? '?controller='.$controller : ''); 如果Tools::getValue('controller'

在此代码中,变量
$controller
已初始化并使用(代码来自Prestashop v1.6)

在这个if块中,什么是不正确的?如何评估该区块

这被认为是最佳实践吗?

将其改写为:

  $controller = Tools::getValue('controller');
  $current_index = 'index.php'.(($controller) ? '?controller='.$controller : '');

如果
Tools::getValue('controller')
的计算结果为false,则
$current\u index
将等于字符串
index.php

如果将块转换为非三元操作,则可以更清楚地看到赋值:

$controller = Tools::getValue('controller');
if ($controller) {
    $parameter = '?controller=' . $controller;
} else {
    $parameter = '';
}
$current_index = 'index.php' . $parameter;

三值操作是最佳实践,但在您提供的示例代码中,由于URL参数分配和三值操作都发生在一行上,因此并不完全清楚。

如果$controller被分配了一个falsy值,则将执行第二个条件。null也是falsy吗?是的。请参阅并查看与==表的松散比较
$controller = Tools::getValue('controller');
if ($controller) {
    $parameter = '?controller=' . $controller;
} else {
    $parameter = '';
}
$current_index = 'index.php' . $parameter;