易犯的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,那么就使用指向操作符->。

时间: 2024-10-23 15:26:16

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

当心!程序员在职业生涯中最易犯的7个错误

当心!程序员在职业生涯中最易犯的7个错误 概述:本文的作者是软件开发领域著名的职业规划导师,他的工作是通过对程序员当前职业状况的了解,向他们提出改进职业规划发展的建议.在与程序员们长期的接触之后,他总结了程序员们最易犯的7个错误. 1.没有明确的职业目标 没有目标的人生,就像无根的浮萍,水流到哪里就飘到哪里,一生漂泊. 如果你想要在软件开发领域获得真正的成功,那么就必须知道该何去何从.或许面对遥远的未来,你已经有了一个粗略的目标了.但是除了这点还不够,你应当坚实自己的目标--清楚的定义在实现过程

(转)C# 程序员易犯的 10 个错误

关于C# C#是针对微软公共语言运行库(CLR)的开发语言之一.针对CLR的开发语言得益于如跨语言集成的性能,异常处理,安全性增强,组件交互的简化模型,调试和分析服务.对于今日的CLR来说,C#是定位到Windows桌面,移动设备或服务器环境中,在处理复杂,专业的开发项目方面使用最广泛的开发语言. C#是面相对象,强类型的语言.C#中严格的类型检查,在编译和运行时,使得典型的编程错误能尽早报告,并且能精准给出错误位置.这能帮助程序员节省很多时间,相比于跟踪那些可以发生在违规操作很长时间之后的令人

数据挖掘中易犯的十大错误

按照Elder博士的总结,这10大易犯错误包括: 0. 缺乏数据(Lack Data)1. 太关注训练(Focus on Training)2. 只依赖一项技术(Rely on One Technique)3. 提错了问题(Ask the Wrong Question)4. 只靠数据来说话(Listen (only) to the Data)5. 使用了未来的信息(Accept Leaks from the Future)6. 抛弃了不该忽略的案例(Discount Pesky Cases)7.

企业进行全球化扩张过程中最易犯的六个错误

注:本文英文版出自HBR,中文版由天地会珠海分舵编译.随着商业逐渐往全球化发展,企业可以通过瞄准正确的国际市场和调整自身的产品及策略以吸引当地的用户来获得竞争优势.同时应该避开下面提到的这几点易犯的错误. 市场营销人员往往处于一个公司进行全球化扩张的最前线.市场团队经常需要负责进行市场调研以决定公司是否应该进行扩张,同时还会负责创建一个获取客户的计划. 本人之前曾经是一个商业顾问,面向的客户就是那些需要进行全球化扩张的企业的市场主管.期间我注意到了一些妨碍一个企业进行市场全球化扩张的拦路虎.下面

看似简单!解读C#程序员最易犯的7大错误

编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中,字符串类型是最容易处理出错的地方,其代价往往也很昂贵,在.NET Framework中,字符串是一个不可变的类型,当一个字符串被修改后,总是创建一个新的副本,不会改变源字符串,大多数开发人员总是喜欢使用下面这样的方法格式化字符串: string updateQueryText = "UPDATE E

机器学习入门阶段程序猿易犯的5个错误

如何进入机器学习领域没有定式.我们的学习方式都有些许不同,学习的目标也因人而异. 但一个共同的目标就是要能尽快上手.假设这也是你的目标.那么这篇文章为你列举了程序猿们在通往机器学习高手道路上常见的五种错误. 1.将机器学习看得高不可攀 机器学习只是是还有一堆技术的集合,你能够用它来解决复杂问题.这是一个飞速发展的领域,因此,机器学习的学术交流一般出如今学术期刊及研究生的课本里,让它看起来高不可攀又难于理解. 要想高效掌握机器学习,我们须要转变观念,从技术转到方法,由精确变为"足够好",

必看 :大数据挖掘中易犯的11大错误

0.缺乏数据(LackData) 对于分类问题或预估问题来说,常常缺乏准确标注的案例. 例如: 欺诈侦测(FraudDetection):在上百万的交易中,可能只有屈指可数的欺诈交易,还有很多的欺诈交易没有被正确标注出来,这就需要在建模前花费大量人力来修正. 信用评分(CreditScoring):需要对潜在的高风险客户进行长期跟踪(比如两年),从而积累足够的评分样本. 1.太关注训练(FocusonTraining) IDMer:就象体育训练中越来越注重实战训练,因为单纯的封闭式训练常常会训练

使用 Nexus 搭建私服仓库时我犯的一个小错误

私服搭建好,啥都配置好了,纳闷的是 Repositories 中的 group 为何总是空值?我还反反复复删了又重建,结果还是一样,不经意间再看 Configuration 选项卡的内容,发现左右两个选项我弄反了:Ordered Group Repositories 里啥都木有,全部在 Available Repositories 里面,于是我尝试两边都要有内容,发现 public group 终于有了东西了.我骂了自己三遍文盲,然后认认真真地翻译了 “Ordered Group Reposit

网站建设易犯的错误

互联网上的网站数量众多,然而精品网站却少之甚少.很多网站在制作时,急功近利,没有制定长远计划,只关注搜索引擎,忽视网站质量和细节.下面来具体解析网站制作设计者易犯的四种错误. 1.急功近利放置太多广告 建设网站的最终目的是为了盈利,但不能急功近利,而忽视一些短期目标的实现,比如忽视用户体验.有的网站在建站之初就放入过多的广告,完全不顾访客的浏览体验.网站的运营工作需要日复一日地进行,并不是一步就可以登天的. 2.建站前没有制定长远计划 在建设网站前,应该做好网站策划工作,如果定位失误,将会失之毫