php编程:PHP编程之纠错指南(2)来源: 发布时间:星期三, 2008年9月10日 浏览:63次 评论:0
∈率瞪希疟局腥魏我淮Τ鱿值钠葱创砦蠖蓟岬贾峦奈侍狻H绻没Щ骋勺约旱某绦蛑杏衅葱创砦蟮幕埃桓龇浅:玫募觳榉椒ň褪窃诒淞康那昂笙允疚淖中畔ⅰ@纾?
print “The Combined Result is: |”.$Combined_Result.“|”; 按照上述方法替换输出语句的脚本重新执行之后的结果如下: The Combined Result is: || 其中,在两个管道符号“|”之间没有任何内容。按照这种方法,我们就可以在程序中找到出现问题的变量。 下面,我们再举一个更加复杂的例子进行说明。 现在,很多网络应用都需要对用户的身份进行验证。一个最简单的实现脚本可以如下: $#@60;? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ if ($Password=$UserPassword && $Name=$UserName){ return 1; } else { return 0;} } if (VerifyPassword (“foo1ish”,“admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; } ?$#@62; 虽然在上述脚本中调用VerifyPassword函数时输入的是错误的密码,但是程序运行之后仍然会产生如下结果: The Password is correct 问题可能会出现在任何地方,下面就让我们使用排除法一一检查。首先,我们很难确定脚本最后的“if”条件语句是否正确。虽然看上去好象是没有问题,但是为了确保程序正确无误,我们不能放过任何一个环节。因此,我们将该条件语句注释掉,同时按照前面介绍的方法对VerifyPassword()函数进行输出。具体如下: $#@60;? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ if ($Password=$UserPassword && $Name=$UserName){ return 1; } else { return 0;} } print “The result of VerifyPassword() is:”; print VerifyPassword (“foo1ish”, “admin”); /*if (VerifyPassword (“foo1ish”, “admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; }*/< ?$#@62; 因为我们使用了错误的密码,所以结果应当为0。但是程序运行之后,我们发现实际结果如下: The result of VerifyPassword() is: 1 这样,我们就知道问题是出现在VerifyPassword()函数的身上。检查了一遍函数之后,我们怀疑问题可能出现在“if”语句中。所以我们屏蔽到VerifyPassword()函数中的条件语句,并进行如下输出: print “UserPassword =$#@62; $UserPassword, Password =$#@62; $Password,”; print “Password==UserPassword =$#@62; ”.(int)($Password==$UserPassword).“$#@60;BR$#@62;”; print “UserName =$#@62; $UserName, Name =$#@62; $Name, ”; print “Name==UserName =$#@62;”.(int)($Name==$UserName).“$#@60;BR$#@62;”; (说明:我们使用(int)($Password==$UserPassword)语句将比较结果转化为整数0或1) 程序修改之后的实际输出结果如下: UserPassword =$#@62; foo1ish, Password =$#@62; , Password==UserPassword =$#@62; 0 UserName =$#@62; admin, Name =$#@62; , Name==UserName =$#@62; 1 I’m sorry, the password is incorrect 这里,我们可以清楚的看出Password和Name两个变量都是空值,也就难怪判断语句不起作用了。 那么为什么$Password为空值呢?我们在程序的开头部分就已经明确的对$Password变量进行了赋值,但是因为某种原其变量值无法带入到VerifyPassword()函数中。回想一下PHP语言关于变量作用域的规定,我们可以立刻找到出现问题的原因,那就是如果要想在函数中使用变量,必须将该变量声明为全局变量。知道了错误的根源之后,我们在VerifyPassword()函数的第一行加入以下语句,然后重新运行程序: global $Password, $Name; 程序运行结果如下: UserPassword =$#@62; foo1ish, Password =$#@62; Secret, Password==UserPassword =$#@62; 0 UserName =$#@62; admin, Name =$#@62; admin, Name==UserName =$#@62; 1 The Password is correct 为什么?按理说我们应当得到密码不正确的错误提示。再一次仔细检查遍程序之后,终于发现原来我们把逻辑运算符“==”误用成“=”,这样就把$UserPassword变量的值赋给了$Password变量。把最后的这两处错误改正过来之后,完成的程序如下: $#@60;? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ global $Password, $Name; if ($Password==$UserPassword && $Name==$UserName){ return 1; } else { return 0;} } if (VerifyPassword (“foo1ish”, “admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; } ?$#@62; 执行程序得到如下结果: I’m sorry, the password is incorrect. 输入正确密码重新运行时,得到以下结果: The Password is correct 这样,我们就成功的找到并解决了问题。希望大家能够从以上的介绍中领悟到查找错误时的一些方法和思路。 0
相关文章读者评论发表评论 |
|