PHP编程:若何准确了解PHP的毛病信息
终于学会把表单的数据插入数据库,然后显示出来了,应该说一个程序的雏形已经诞生了。毛病 咱们编写法式时,不管如何当心慎重,出错老是在所不免的。这些毛病凡是会利诱PHP编译器。假如开辟人员没法懂得编译器报错信息的寄义,那末这些毛病信息不但毫无用途,还会经常让人感应懊丧。编译PHP剧本时,PHP编译器会尽其所能呈报它碰到的第一个成绩。如许就发生一个成绩:只要当毛病呈现时,PHP才干将它辨认出来(本文前面对此成绩停止了具体描写)。恰是因为这个原因,编译器指出失足的那行,从外表上看来能够语法准确无误,或多是基本就不存在的一行!
更好地舆解毛病信息可以大小节省肯定并更正毛病内容所消费的工夫。因而,在本文中,我将勉力说明多种分歧类型的PHP报错信息,和在开辟过程当中若何准确了解各类报错信息的寄义。
本文中所讲述的内容与您所使用的PHP的版本有关,由于本文所描写的各类毛病其实不限制于某一特别版本的特定毛病。别的咱们假定您是一名低级或中级法式员,并已从事编程任务有半年或一年的工夫。
编译器的任务体例
要弄清晰编译器为何会呈报某一行上存在毛病,起首必需明白编译器解析PHP代码的机制。我其实不盘算在本文中对此停止具体论说,然而,咱们将会会商一些更容易于激发毛病的复杂概念。
变量声明
假如在一条语句中声明一个变量,详细体例以下所示:
$variable = 'value';
编译器起首求出语句右半局部的值(即等号右侧的一切内容)。在一些编程书本中,将此暗示为语句的 RHS (右半局部)。恰好恰是语句的这一局部经常会激发毛病。假如利用的语法不准确,就会呈现解析毛病。
解析毛病
Parse error:解析毛病,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\script.php on line 19
每次肯定了前一毛病时,解析毛病一个接一个地不休呈现。由于PHP在第一个解析毛病以后就中断履行剧本,调试并改正这一系列的毛病常常会让人感觉出格腻烦。
并且,解析毛病具有很少的信息,几近不呈报毛病地点的行号。详细缘由就是当呈现毛病时,编译器剖断好几行的语法看起来应当是无效的,直至碰到有效的语法,最能够的情况就是表达式中利用了预界说的字词,例如;
while = 10; // Bad ? while 就是一个预界说字词,不克不及分派给一个值
预界说的字词包含 while、function等,假如PHP利用 uses to evaluate your code. 您不克不及利用这些预界说字词来定名变量,并且假如您非要如许做的话,PHP就会报出更多的毛病,这是您没法忍耐。
关于这个成绩,上面的示例能够会对您有所匡助。请征询浏览一下上面所示的PHP 代码:
<?php
$b = "somevalue"
if($b == "somevalue"){
print "Hello world!";
}
?>
毛病位于"$b ="一行(在语句的末尾短少分号),所以毛病应当是"解析毛病:第3行短少分号"对吧?而不该该根据解析器剖断的:
Parse error: parse error, unexpected T_IF in c:\program files\apache
group\apache\htdocs\ereg2.php on line 4
在第4行,if() 语句的语法是准确的。那末,编译器是被甚么给弄懵懂了呢?线索就是"unexpected T_IF" 局部。呈现 "unexpected T_???"毛病时,它所暗示的寄义为:编译器发明在预界说字不该该呈现的地位呈现。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。
值得光荣的是,一些毛病的缘由也很复杂:
语句没有利用分号(;)停止,好比下面的示例。字符串中短少引号。
其他一些罕见的毛病
我见过的最多见的毛病就是,当没有利用大括号( } )停止一个函数或一个轮回时呈现的毛病,这极可能是最多见,最使人烦的毛病。详细代码以下:
function UselessFunction() {
for($i < 0; $i < 10; $i++){
}
将发生以下毛病:
Parse error: parse error, unexpected $ in c:\program files\apache
group\apache\htdocs\ereg2.php on line 9
因为函数 UselessFunction 没有利用大括号( } )来停止,PHP编译器不休查找暗示停止的大括号直至抵达文件末尾为止。由于编译器未找到一个婚配的大括号,就会呈报文件末尾处有毛病。
假如准确地反应了代码的条理布局,毛病信息就会变得十分分明。假如没有标明朝码的条理布局,那末最初要想查清晰究竟健忘了甚么也会变得几近是不成能的。所以,请记住,必定要标明朝码的条理布局。Tab键可以很轻易地完成这一点。对后续的开辟人员来讲,掌控代码框架并对其停止修正也会更轻易一些。
MySQL 毛病
另外一极为使人厌恶的毛病信息就是最多见的MySQL毛病,这经常使 PHP老手感应很是头疼:
Warning: Supplied argument is not a valid MySQL result resource in...
下面所呈报有错的一行多是:
while($row = mysql_fetch_array($result)) {
参数 $result并非一个无效的资本。在英语中它暗示由于查询掉败,将没法处置mysql_fetch_array。任一查询的语法有效(您应当将查询复制-粘贴到MySQL 掌握台参考来停止测试),或与数据库的毗连掉败(这类情形下您应当再次反省用户名和口令等)。
避免毛病产生
第一步,智能代码器可接纳以下几步来消弭以下毛病呈现:
・ 在每条语句的末尾处,不用思索添加分号――这应当成为一种习气。
・ 老是要尽量标明朝码的条理布局,这可使您可以检查是不是健忘在if 挪用或函数末尾等地位添加大括号。
・ 请利用可凸起显示语法的编纂器(如 HTML-Kit)。有了这类编纂器的帮助,您就可以肯定是不是健忘了添加引号,是不是短少分号等。
结论
本文咱们对PHP编译器可报出的一些看起来能够没有甚么意义的毛病有了必定的懂得。咱们需求将所学的常识使用到若何防止毛病和毛病呈现时若何改正毛病。调试是一个开辟人员一切任务中的最主要的局部之一。进步调试效力可大大加速全部任务的进度,延长完成一项工程所需消费的工夫,同时还可以分明加重代码掉败所带来的精力压力。
完成一个功能齐全的动态站点 写的比较杂,因为我也是个新手,不当至于大家多多指正。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 实践是检验自己会不会的真理。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
页:
[1]