仓酷云

标题: PHP编程:准确了解静态网页制造手艺PHP的毛病信息... [打印本页]

作者: 再现理想    时间: 2015-2-4 00:01
标题: PHP编程:准确了解静态网页制造手艺PHP的毛病信息...
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...     咱们编写法式时,不管如何当心慎重,出错老是在所不免的。这些毛病凡是会利诱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编译器可报出的一些看起来能够没有甚么意义的毛病有了必定的懂得。咱们需求将所学的常识使用到若何防止毛病和毛病呈现时若何改正毛病。调试是一个开辟人员一切任务中的最主要的局部之一。进步调试效力可大大加速全部任务的进度,延长完成一项工程所需消费的工夫,同时还可以分明加重代码掉败所带来的精力压力。
当然你可以把你最基本的功能放出来的时候就放出来,比如放到论坛上,让大家都参与,
作者: 飘灵儿    时间: 2015-2-4 08:02
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 简单生活    时间: 2015-2-26 18:33
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者: 乐观    时间: 2015-3-8 16:38
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 若天明    时间: 2015-3-11 17:17
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 只想知道    时间: 2015-3-19 03:04
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 活着的死人    时间: 2015-3-27 02:12
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 柔情似水    时间: 2015-3-27 03:10
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 蒙在股里    时间: 2015-3-27 07:09
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 不帅    时间: 2015-4-1 11:11
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 莫相离    时间: 2015-4-10 19:35
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 小魔女    时间: 2015-4-11 20:56
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 灵魂腐蚀    时间: 2015-4-16 18:05
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 第二个灵魂    时间: 2015-5-3 14:26
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 仓酷云    时间: 2015-5-9 09:17
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 愤怒的大鸟    时间: 2015-6-10 15:37
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 小妖女    时间: 2015-6-12 03:01
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 分手快乐    时间: 2015-6-14 20:34
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 若相依    时间: 2015-6-29 23:15
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2