1

我刚刚将一个 PHP 网站从 Linux 服务器转移到 Windows。除了一个巨大的不同外,一切似乎都一样:

$_GET['action']在 Linux 服务器上,如果未设置,则忽略以下代码:

$action = $_GET['action'];
if($action=='add'){
    echo 'good';
}

但是,这会阻止页面加载到 Windows 服务器上。

起作用的是:

if(isset($_GET['action'])){
    $action = $_GET['action'];
}else{
    $action='';
}

if($action=='add'){
    echo 'good';
}

2个问题:

  1. 有没有办法将服务器配置为更宽容没有值的变量?

  2. 第二个代码示例是更好的做法吗?

4

3 回答 3

3
Is there a way to configure the server to be more forgiving of variables that don't have a value?

在变量前面放一个@符号会告诉 php 忽略错误。但我认为这是不好的做法。

Is the second code example better practice?

我确实认为这是一个很好的做法,检查总是好的。

IMO 你应该选择第二个,你总是可以使用三元运算符。所以而不是

if(isset($_GET['action'])){
    $action = $_GET['action'];
}else{
    $action='';
}

你可以写

$action = isset($_GET['action']) ? $_GET['action'] : '';

两者都做同样的事情。

于 2012-05-04T15:57:02.587 回答
2

第二台服务器仅配置为默认显示错误,而第一个服务器则没有。

如果您将以下代码放在页面顶部,它也会在第一台服务器上显示通知:

error_reporting(E_ALL);

检查变量是否存在始终是一个好习惯。

于 2012-05-04T16:00:09.033 回答
0

在我看来,检查是否设置了数组索引或变量绝对是更好的做法,并保持您的错误报告保守地冗长。

为了便于处理数据并避免每次出现这种情况时都将我的代码与三元组混淆(通常,如果您使用 PHP 数组来保存可选配置数据但想在代码中嵌入合理的默认值),我一直发现它建设性地在我的核心实用程序代码中隐藏一个数组提取函数,如下所示:

function aex( &$srcArray, $variableName, $defaultValue = null )
{
    return isset( $srcArray[$variableName] )
            ? $srcArray[$variableName]
            : $defaultValue
            ;
}

那么你只需像这样提取你的变量:

$action = aex( $_GET, 'action', 'none' );

并且会保证有有用的价值,不会抛出警告。

于 2012-05-04T16:33:48.997 回答