当前位置:首页> PHP教程> PHP入门
关键字
文章内容
PHP编程之纠错篇
 
 
修改时间:[2009/01/24 03:46]    阅读次数:[883]    发表者:[起缘]
 
最近一段时间PHP凭借其功能强大简单易用的特点被越来越多的人们所喜爱和接受成为目前最为流行的脚本编程语言之一。本文将结合用户在使用PHP过程中经常容易出现的问题包括语法错误程序运行错误以及逻辑错误等展开详细的介绍希望能够对那些目前正在学*PHP语言的用户有所帮助。此外本文还将会在文章的结束部分对PHP编程过程中应当注意的各种事项加以汇总供读者参考。



  PHP脚本语言所具有一个显著的特点就是能够自动生成变量实例
不要求用户对所需要使用的变量进行声明。该特点既有值得推崇之处但是同时也为用户所编写的脚本程序埋下了隐患。从好的方面来说用户不再需要象使用C语言那样在程序的开头对每一个将要在程序中使用的变量进行声明但是现在用户必须非常小心每一个变量名称的正确拼写否则就可能会在无意当中创建了新的变量。有些编程语言例如PERL等可以记录下程序中只使用过一次的变量的信息根据用户的预先设置发出警告提示。此外PERL还提供了一个功能十分强大的调试器。截止到4.0.2版本PHP语言中还没有包含调试器。但是这并没有影响到PHP语言的流行和推广。PHP提供了非常广泛的功能即使与象C语言这样成熟的编程语言相比也毫不逊色。可以说PHP是目前使用最方便对WEB支持功能最完善的脚本语言之一。



  下面
就让我们言归正传来看一看在PHP编程过程容易出现哪些问题以及相应的应当采用什么样应对措施。



  分号的使用正象我们平时写文章时必须要在每一句话的结尾处加上句号一样
PHP要求程序中的每一条语句都必须使用分号“”结束。这是一条最基本的语法规则但是同时也最容易出现问题。我们在编写程序时很少会一行一行的检查是否漏掉了分号但是一旦出现任何一处疏忽解析程序就回立刻发出错误报告。有时报告中可能会包含出现问题的语句行数。



  

  $Output
="Hello World";



  
echo $Output



  $Other
="Blah";



  
print $SomeMoreText;



  
?>



  上述代码的第二行“
echo $Output”的结尾处我们漏掉了一个分号如果执行该脚本将会产生如下错误提示



  Parse error
: parse error, expecting `,’’ or `;’’ in /usr/local/apache/htdocs/test.php on line 8报告虽然指出了出现错误的原因即漏掉了逗号“”或分号“但是却将出现问题的语句定在了第八行。因为这段代码非常简单我们很容易就可以找到真正出现错误的地方。但是如果程序非常复杂时要想顺利的找出错误就有些困难了。



  根据笔者以往的经验
建议采用以下方法



  如果当错误报告中指出的语句没有明显的问题时
可以检查位于该语句之前的其它指令行不包括注释行是否正确。如果仍然没有找到错误可以将报告中指出的语句行注释掉在该语句行的最前面加上“//”或“#”注释符号或者改为用户能够确保完全没有问题的其它语句。之后重新运行程序如果错误提示仍然指向同一行就表明真正有问题的语句应当位于被注释掉的语句行的前面。按照上述方法逐一检查位置靠前的每一行指令直到错误提示信息发生改变。这时我们就成功的挖出了真正的罪魁祸首。



  变量的问题与其它编程语言要求用户显式声明变量不同
PHP语言允许用户自动使用所有变量而不必进行事先的声明。变量名称的拼写错误成为困扰PHP用户的一个大问题。



  

  
function Combine ($FirstHalf, $SecondHalf)



  
{



   $Combined_String
=$FirstHalf.$SecondHalf;



   
return $Combined_String;



  
}



  $FirstString
="WDVL - ";



  $SecondString
="Illustrated Encyclopedia";



  $Combine_Result
=Combine ($FirstString, $SecondString);



  
print $Combined_Result;



  
?>



  当我们运行以上脚本时
将会看到由于程序没有返回任何数据而出现的错误提示。这里我们为了更好的说明问题选择了一个非常直观的例子。在现实当中有时问题并不会这么简单。相信大家都已经找到了出现问题的原因那就是“print $Combined_Result;”中的变量名称“$Combined_Result”应当改为“$Combine_Result”。