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行短少分号"对吧?而不该该根据解析器剖断的:
rse error: parse error, unexpected T_IF in c:\program files\apachegroup\apache\htdocs\ereg2.php on line 4
在第4行,if() 语句的语法是准确的。那末,编译器是被甚么给弄懵懂了呢?线索就是"unexpected T_IF" 局部。呈现 "unexpected T_???"毛病时,它所暗示的寄义为:编译器发明在预界说字不该该呈现的地位呈现。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。
值得光荣的是,一些毛病的缘由也很复杂:
语句没有利用分号(;)停止,好比下面的示例。字符串中短少引号。
其他一些罕见的毛病
我见过的最多见的毛病就是,当没有利用大括号( } )停止一个函数或一个轮回时呈现的毛病,这极可能是最多见,最使人烦的毛病。详细代码以下:
<?php
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编译器可报出的一些看起来能够没有甚么意义的毛病有了必定的懂得。咱们需求将所学的常识使用到若何防止毛病和毛病呈现时若何改正毛病。调试是一个开辟人员一切任务中的最主要的局部之一。进步调试效力可大大加速全部任务的进度,延长完成一项工程所需消费的工夫,同时还可以分明加重代码掉败所带来的精力压力。
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 基础有没有对学习php没有太大区别,关键是兴趣。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 爱上php,他也会爱上你。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
页:
[1]