我的错误日志变得非常快,因为我引用了大量可能存在或可能不存在的变量。我一直在回顾并开始清理它们,但想看看是否有更有效(和更清洁)的方法来检查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']; ?>" />
如果已设置样品编号,则显示样品编号。
有没有更好的方法来处理这样的场景?
答案 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
}