9条PHP编程小知识及易犯的小错误


Posted in PHP onJanuary 22, 2015

变量声明

如果在一条语句中声明一个变量,如下所示:$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控制台进行测试。

注意echo和print的区别

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

注意空字符串('')和NULL的区别

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

分清==(等于)和===(全等于)的区别

两者都属于比较运算符,==(等于)只比较值是否相等,而===(全等于)则不但比较值是否相等,还会比较类型是否相等,它更为严格。

分清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语句会提示一个致命错误。

注意isset和empty的区别

empty是判断一个变量是否为“空”,而isset则是判断一个变量是否已经被设置。

分清self::和this-->的区别

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

PHP 相关文章推荐
一个简单的MySQL数据浏览器
Oct 09 PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
PHPEXCEL 使用小记
Jan 06 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php运行时动态创建函数的方法
Mar 16 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
php图片裁剪函数
Oct 31 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
PHP将HTML转换成文本的实现代码
Jan 21 #PHP
php使用Cookie控制访问授权的方法
Jan 21 #PHP
PHP+MySQL修改记录的方法
Jan 21 #PHP
PHP+MySQL删除操作实例
Jan 21 #PHP
PHP+MySQL插入操作实例
Jan 21 #PHP
php+mysql数据库查询实例
Jan 21 #PHP
php使用Cookie实现和用户会话的方法
Jan 21 #PHP
You might like
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
金讯Java笔试题目
2013/06/18 面试题
制衣厂各岗位职责
2013/12/02 职场文书
面试后感谢信
2014/02/01 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
青年文明号创建承诺
2014/03/31 职场文书
健康教育评估方案
2014/05/25 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫