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 相关文章推荐
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php 读取文件乱码问题
Feb 20 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 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
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
python英语单词测试小程序代码实例
2019/09/09 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python构造IP报文实例
2020/05/05 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
悬挂训练绳:TRX
2017/12/14 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
企业治理工作自我评价
2013/09/26 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python