php中的不确定变量

时间:2010-07-14 06:34:10

标签: php

if($ a == 4){        echo'ok';     }

现在显示错误,因为$ $未定义变量。 我的决定:

if(isset($a)){
    if($a == 4){
    echo 'ok';
    }
}

但也许有更好的解决方案?

5 个答案:

答案 0 :(得分:14)

我觉得这很好。如果您愿意,可以合并两个if

if (isset($a) && $a == 4) {
  echo 'ok';
}

答案 1 :(得分:6)

您的解决方案是正确的,但如果您想要100%“干净”,那么您永远不必使用isset(),因为您的变量应始终在范围内。您应该在开头定义$ a = null,并检查它是否为空。

这是静态类型程序的工作方式(比如java)。但是,由于您使用的是PHP,因此您可以决定放宽这一点,并通过允许使用未定义的变量(这会使代码更脏,但更短且更易读)来使用PHP规则。它是由你决定。在这种情况下,更改php.ini中的错误报告不发出此类通知。

答案 2 :(得分:2)

理想情况下,您不应该这样做。如果$ a最初是在条件内创建的,而不是在所有情况下创建的,则应该声明它并在该条件之前将其设置为null。

比较

if(false)
{
   $a = 4;
}
//...
if($a == 4){
   echo 'ok';
}

要:

$a = null;

if(false)
{
   $a = 4;
}
//...
if($a == 4){
   echo 'ok';
}

是的,if (false)永远不会将$ a设置为4.但是,第二个示例不会触发警告。

此外,我希望你 依赖于register_globals

否则,如果必须使用isset(),我会按照KennyTM的建议将调用合并到一个if语句中。

答案 3 :(得分:0)

以下解决方案较短,但很难看(即使经验丰富的程序员厌恶地逃跑的代码):

if (@$a == 4) // Don't show the warning in this line (*UGLY*)
  echo 'OK';

error_reporting(error_reporting() & ~E_NOTICE); // Don't show any notice at all (*EVEN UGLIER*)

两者都被认为是不好的做法,因为你可能会错过一个不相关的通知,这可能是一些更深层次问题的症状。

答案 4 :(得分:0)

@对PHP社区造成了很大的破坏。我无法计算调试和修复@代码的时间。