这怎么可能是有效的PHP代码?以及如何避免这种情况


How can this be valid PHP code? And what can be done to avoid it?

我今天检查了项目范围内的错误日志,发现了大量这样的通知:

"未定义的索引:myVar在/myScript.php的第3行"

我花了很长时间才找到这个错误。所以这就是它,浓缩到只有4行代码(最初它比4行代码多一点)。我只是没有看到分号!
if (isset($_POST['myVar']));
{
    echo $_POST['myVar'];
}

在其他容易出错的情况下,我有我的方法。就像在这个例子中,我错误地使用了"="而不是"==":

if ($myVar = 5) {} // valid PHP but sooo wrong...
if (5 = $myVar) {} // parser error warns me of my own mistakes

那么,在上面的例子中,我应该做些什么来避免分号的事情发生呢?

你可以改进你的编码风格。

PSR-2样式不允许在使用IF时将花括号放在新行上,它们必须与IF在同一行上,用空格分隔。

if (isset($_POST['myVar'])); {
    echo $_POST['myVar'];
}

这看起来比你的代码更可疑。仍然有足够的字符来混淆搜索的眼睛,但是您通常不希望在IF语句的括号和花括号之间出现分号。

编码风格就是让错误看起来像错误,并且突出。虽然这个语法确实是有效的,但它看起来很奇怪,很难发现错误,因为分号应该在一行的末尾。

如果你自动格式化你的代码,你会得到你原来的代码,让你想知道为什么花括号到下一行…

回答您的直接问题,这是一个问题,要么使用一个IDE,给你更好的提示,或者只是调试更好,这样就不会花你很长时间。您还可以打开错误消息,这样您就可以立即获得错误,而不必检查日志。

error_reporting(E_ALL);

然后使用错误消息提示来帮助隔离问题。它说错误在第3行,myVar是未定义的,所以你应该真正关注第3行或它之前的内容,并查看为什么使用未定义的变量。

我猜在这种情况下,你会更快地注意到分号。