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.ini 中文版
Oct 28 PHP
第八节--访问方式
Nov 16 PHP
PHP伪静态写法附代码
Jun 20 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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输入流php://input实例讲解
2015/12/22 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
python实现马丁策略的实例详解
2021/01/15 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
担保书格式及范文
2014/04/01 职场文书
精神病医院见习报告
2014/11/03 职场文书
高温慰问简报
2015/07/21 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS