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 验证图片生成函数
May 21 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
PHP加密解密函数详解
Oct 28 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 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
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
JS 对象介绍
2010/01/20 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[00:35]可解锁地面特效
2018/12/20 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
python中的字符串内部换行方法
2018/07/19 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
Keras 使用 Lambda层详解
2020/06/10 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
节约粮食标语
2014/06/18 职场文书
医院护士工作检讨书
2014/10/26 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
一文搞懂Python Sklearn库使用
2021/08/23 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server