需要一些简单的帮助来理解PHP5之前的代码吗
我从另一个问题转到nstrees,一直在研究脚本。它上一次更新是在2005年,它依赖于一些显然已经被弃用的东西,比如需要一些简单的帮助来理解PHP5之前的代码吗,php,legacy-code,deprecated,Php,Legacy Code,Deprecated,我从另一个问题转到nstrees,一直在研究脚本。它上一次更新是在2005年,它依赖于一些显然已经被弃用的东西,比如HTTP\u POST\u VARS,但由于我只做了不到一年的PHP,所以我对这些东西不是很熟悉 无论如何,在我的新手眼里,编码风格似乎很奇怪,我想听听关于这个函数的哪一部分的第二点意见: // returns the first node that matches the '$whereclause'. // The WHERE clause can optionally con
HTTP\u POST\u VARS
,但由于我只做了不到一年的PHP,所以我对这些东西不是很熟悉
无论如何,在我的新手眼里,编码风格似乎很奇怪,我想听听关于这个函数的哪一部分的第二点意见:
// returns the first node that matches the '$whereclause'.
// The WHERE clause can optionally contain ORDER BY or LIMIT clauses too.
function nstGetNodeWhere ($thandle, $whereclause) {
$noderes['l'] = 0;
$noderes['r'] = 0;
$res = mysql_query("SELECT * FROM ".$thandle['table']." WHERE ".$whereclause);
if (!$res) { // problem area 1
_prtError();
} else {
if ($row = mysql_fetch_array($res)) { // problem area 2
$noderes['l'] = $row[$thandle['lvalname']];
$noderes['r'] = $row[$thandle['rvalname']];
}
}
return $noderes;
}
在上面的代码中,我将我不太确定的地方标记为//问题区域x
,其他所有内容都是原始脚本
关于PA1,这只是检查查询是否成功运行吗
而PA2,NetBeans给了我一个警告“可能的意外分配,应该避免在条件下的分配。”。。。所以我马上把它从=
改成=
,当然把脚本弄坏了,呵呵
仔细想想,我想这只是对$res
的另一个错误检查,这次是为了确保确实返回了一些数据
最后,这是一个奇怪的PHP,还是我太绿了以至于不能去摸索它
谢谢你,伙计 我假设这段代码可以加载文章,然后将它们排序到“左-右”数组中,这样就可以在两列布局中打印出来。也许吧。:) 是的,PA1正在检查查询是否成功。PA2只是获取实际的行
if (!$res) { // problem area 1
如果mysql\u查询无法执行SQL查询,则返回false。这基本上是对非(!)除false以外的任何值的测试,因此如果mysql_查询中出现错误,if测试将匹配,并执行代码的print error分支
if ($row = mysql_fetch_array($res)) { // problem area 2
将结果集中的下一行指定给$row;或者,如果结果集中没有更多行,则将$row设置为false,在这种情况下,“如果测试”将为false问题区域1正是您所认为的。它检查查询是否成功运行。查看的文档(因为您使用Netbeans,所以还可以在编辑器中突出显示函数名并点击F2以获得内联弹出窗口)。您正在查找“返回值”部分。在那里,它说它将在任何错误上返回FALSE(布尔值FALSE) 检查
if (!$res)
与检查
if ($res == false)
if ($res === false)
理想情况下,您应该检查
if ($res == false)
if ($res === false)
因为它更安全,因为PHP对变量==false非常放松,但我现在不想让您对此感到困惑。如果你愿意的话,你可以先读一读
问题区域2非常常见,但会在Netbeans中显示警告,是的。它所做的是将mysql_fetch_array()中的一个值赋值到$row中,并检查该值现在是真是假,同时还允许您在if()中的以下代码块中使用$row中的相同值。感谢您对PA2的非常详细的解释。这是3个帖子中唯一一个真正帮助我“得到它”的。我没有意识到这个构建实际上是一个两步操作(分配,检查)。现在说得通了!