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编译器可报出的一些看起来能够没有甚么意义的毛病有了必定的懂得。咱们需求将所学的常识使用到若何防止毛病和毛病呈现时若何改正毛病。调试是一个开辟人员一切任务中的最主要的局部之一。进步调试效力可大大加速全部任务的进度,延长完成一项工程所需消费的工夫,同时还可以分明加重代码掉败所带来的精力压力。要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 实践是检验自己会不会的真理。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 本文当是我的笔记啦,遇到的问题随时填充 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
页:
[1]