Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一些简单的帮助来理解PHP5之前的代码吗_Php_Legacy Code_Deprecated - Fatal编程技术网

需要一些简单的帮助来理解PHP5之前的代码吗

需要一些简单的帮助来理解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

我从另一个问题转到nstrees,一直在研究脚本。它上一次更新是在2005年,它依赖于一些显然已经被弃用的东西,比如
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个帖子中唯一一个真正帮助我“得到它”的。我没有意识到这个构建实际上是一个两步操作(分配,检查)。现在说得通了!