(isset)变量和优化的PHP错误

时间:2010-10-14 20:04:29

标签: php

我的错误日志变得非常快,因为我引用了大量可能存在或可能不存在的变量。我一直在回顾并开始清理它们,但想看看是否有更有效(和更清洁)的方法来检查php变量。

目前我使用如下:

示例1:

<?php
     if (isset($_SESSION['checked']) && $_SESSION['checked'] == "Y") {
        do something;
     }
?>

示例2: (在HTML格式内)

<input type="text" name="sample_number" onKeyUp="this.value=this.value.replace(/[^0-9]/ig, '')" value="<?php echo $fields['sample_number']; ?>" />

如果已设置样品编号,则显示样品编号。

有没有更好的方法来处理这样的场景?

4 个答案:

答案 0 :(得分:2)

它有点冗长,但array_key_exists()isset()更快地检查数组密钥的存在,isset()附带警告,它将为NULL返回false值(您可能故意将变量设置为NULL,但在这种情况下isset()在语义上会出错。)

所以,在你的第一个例子中:

<?php
    if(array_key_exists('checked', $_SESSION) && $_SESSION['checked'] == 'Y') {
        do something;
    }
?>

在您的第二个示例中,我建议使用array_key_exists()和三元运算符:

<input type="text" name="sample_number" onKeyUp="this.value=this.value.replace(/[^0-9]/ig, '')" value="<?= array_key_exists('sample_number', $fields) ? $fields['sample_number'] : '' ?>" />

因为它可以在不通过if()条件重复HTML的情况下提供更紧凑的解决方案。

编辑:我总是希望尽早初始化我的变量,FWIW。这可能会变得棘手,因为总是有潜在的开销,例如,如果你有一大堆你初始化的阵列但是最终没有使用它们(例如,如果它们仅在某些条件下使用),那么一切都是相对的你的申请。没有什么可以替代良好的判断力。

答案 1 :(得分:2)

我经常给自己写一些函数,它从相关数组中获取值(即会话,获取或发布)。我通常会让这些函数指定一个默认值,因为我不在乎是否设置了一个值或者设置了默认值(这导致没有特殊行为)。

基本上,函数可能如下所示:

function getSessionVar ( $name, $default = '' )
{
    if ( !isset( $_SESSION[$name] )
        return $default;

    switch ( gettype( $default ) )
    {
        'integer':
            return intval( $_SESSION[$name] );
            break;

        'double':
            return floatval( $_SESSION[$name] );
            break;

        default:
            return $_SESSION[$name];
     }
}

然后我只是在文件/代码块的开头使用这个函数来获取我感兴趣的所有变量,并使用该变量的值。

答案 2 :(得分:2)

isset是他们在Zend认证培训中教授的方法。你可以采取快捷方式并在语句咆哮之前做@,或者你可以将错误级别降低,但我坚信错误存在是有原因的....好吧,大多数都是反正的。花点时间做正确的事。

答案 3 :(得分:1)

这不是最好的解决方法,但如果您非常需要报告所有错误但仍想忽略您在那里描述的情况,我想您可以这样做:

if ($test = @$_SESSION['checked'] && $test == 'Y') {
   do something
}