文档章节

易犯的PHP小错误及相应分析

京牛教育科技
 京牛教育科技
发布于 2016/08/30 09:54
字数 1443
阅读 10
收藏 0
php

我们编写程序时,即使是经验丰富的程序员,犯个错误也是在所难免的。但是,如果开发人员不能注意到这些错误,也无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧。

更好地理解错误信息可以大大节省寻找并改正错误内容所花费的时间。因此在本文中,我们会介绍写PHP程序时常犯的错误,以及不同类型的PHP报错信息和含义。另外本文中所讲述的内容与所使用的PHP的版本无关。更多PHP的学习内容,可以参考《如何给程序中的变量起个好名字》《深入探讨PHP类的封装与继承》《PHP数组的详细解读》。

要搞清楚编译器为什么会报告某一行上存在错误,首先必须明确编译器解析PHP代码的机制。

变量声明
如果在一条语句中声明一个变量,如下所示:
$var = 'value'; 
编译器首先会求出语句右半部分的值,恰恰正是语句的这一部分常常会引发错误。如果使用的语法不正确,就会出现解析错误。


解析错误
例如,Parse error:解析错误,unexpected T_WHILE in c:program filesapache groupapachehtdocsscript.php on line 19

每次确定了前一错误时,解析错误一个接一个地不断出现,PHP在第一个解析错误之后就停止执行脚本。而且,解析错误具有很少的信息,几乎不报告错误所在的 行号。比如表达式中使用了预定义的关键字,例如:while = 10;  while 就是一个预定义的关键字,不能分配给它一个值。 预定义关键字包 括 while、function等,我们不能使用这些预定义关键字来命名变量,否则编译器就会报错。其中,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 filesapache groupapachehtdocsereg2.php on line 9
由于函数 UselessFunction 没有使用大括号( } )来结束,PHP编译器会不断查找表示结束的大括号直至到达文件末尾为止。因为编译器未找到一个匹配的大括号,就会报告文件末尾处有错误。

如果正确地反映了代码的层次结构,错误信息就会变得非常明显。否则,代码调试起来就会非常的困难。所以,一定要标明代码的层次结构,这对后续的开发人员来说,改进代码也会更容易一些。


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 控制台进行测试。

 

更多易犯的错误

1. 注意echo和print的区别
PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回 flase。因此可以作为一个普通函数来使用,例如执行$r = print "Hello World"; 变量$r的值将为1。而且代码中echo语 句的运行效率要略快于print语句。


2. 注意空字符串('')和NULL的区别
PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,前者是string,而后者是NULL,可见字符串('')、NULL值相等但类型不等。


3. 分清==(等与)和===(全等与)的区别
两者都属于比较运算符,==(等于)只比较值是否相等,而===(全等于)则不但比较值是否相等,还会比较类型是否相等,它更为严格。


4. 分清include与require的区别
include()与require()的功能也基本相同,但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php:
if($a){      
   include("a.php");      
  
而require()则和include()不同,不管$a取何值,下面的代码都会把文件a.php包含:
if($a){      
   require("a.php");      
}   

在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行。但是,requre语句会提示一个致命错误。


5. 注意isset和 empty的区别
empty是判断一个变量是否为“空”,而isset则是判断一个变量是否已经被设置。


6. 分清self :: 和 this--> 的区别
在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(常量)或者static(静态属性),那么就必须使用域操作符::,而如果被引用的变量或者方法没有被声明成const或者static,那么就使用指向操作符->。

扫一扫上方二维码关注我们,可获得更多资讯!

本文转载自:

京牛教育科技
粉丝 6
博文 39
码字总数 4393
作品 0
广州
私信 提问
加载中

评论(1)

potin
potin
41
jfinalUIB运行示例报错

jfinalUIB-V2-for-maven运行demo,经常报错,梳理了一下,大概容易犯的错误有以下几种: 1.功能按钮不出现可能出现的原因:功能url没有授权/功能url填写的时候把jf写成了if; 2.点开菜单项中没...

Tong7
2016/05/20
41
0
我对Objective-C中一个方法如何传递多个参数的理解

原来如此 Objective-C语法中多参数传递方法经常是初学者最容易犯困的地方。我自己也是刚刚悟出来与大家分享. 分析 由于我们已有的语言经验告诉我们定义方法都是: 例如: C/C++ JAVA C#(跟Jav...

花米
2013/11/22
16K
6
8点需要注意的Web编程小细节

长时间以来,我们创造了某些在构造和范围内用以提升网站易用性的约定和实践。然后在我们进行web编程的时候总有一些疏忽和纰漏。今天,E良师益友网在这里总结了一些web编程时容易出现的小错误...

罗马教堂的钟声
2015/12/23
40
0
PHP程序员最易犯10种错误

PHP是个伟大的web开发语言,灵活的语言,但是看到php程序员周而复始的犯的一些错误。我做了下面这个列表,列出了PHP程序员经常犯的10中错误,大多数和安全相关。看看你犯了几种

NILYANG
2009/06/01
133
0
Selenium2(webdriver)_定位不到元素常见原因及解决办法

在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1、Frame/Iframe原因定位不到元素:   这个是最常见的原因,...

北_木
2016/03/01
78
0

没有更多内容

加载失败,请刷新页面

加载更多

程序性能checklist

程序性能checklist

Moks角木
4分钟前
2
0
VUE 计算属性

本文转载于:专业的前端网站▶VUE 计算属性 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>vue示例</title> </hea......

前端老手
4分钟前
2
0
快速搭建LNMT平台和环境部署

Tomcat部署的基本概念 1. CATALINA_HOME与CATALINA_BASE分别指什么?     CATALINA_HOME指的是Tomcat的安装目录     bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/start...

网络小虾米
4分钟前
2
0
float浮动

float浮动 float浮动概念及原理: 文档流:文档流是文档中可显示对象在排列时所占用的位置。 加浮动的元素,会脱离文档流,会沿父容器靠左或靠右排列,如果之前已经有浮动的元素,会挨着浮动...

studywin
26分钟前
2
0
实战项目-学成在线(一)

之前看的黑马程序员实战项目之一,打算以博客的形式写出来,也让自己重新温习一下。 1、项目背景 略(就是当前这东西很火,我们重点在开发,这些就略过) 2、功能模块 门户,学习中心,教学管...

lianbang_W
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部