php语言

PHP中容易出错的小细节

时间:2024-07-26 16:35:41 php语言 我要投稿
  • 相关推荐

PHP中容易出错的小细节

  细节决定成败,那么在PHP中有哪些小细节是容易出错的呢?一起来看看吧!希望对大家有所帮助,更多内容请关注应届毕业生网!

  注意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。而require()则和include()不同,不管$a取何值,下面的代码都会把文件a.php包含,比如:

  在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行。但是,require语句会提示一个致命错误。

  注意isset和 empty的区别

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

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

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

  foreach循环后留下悬挂指针

  这里有个问题很多人会迷糊。循环结束后,$value并未销毁,$value其实是数组中最后一个元素的引用,这样在后续对$value的使用中,如果不知道这一点,会引发一些莫名奇妙的错误:)看看下面这段代码:

  上面代码的运行结果如下:

  1,2,3

  1,2,3

  1,2,2

  你猜对了吗?为什么是这个结果呢?

  我们来分析下。第一个循环过后,$value是数组中最后一个元素的引用。第二个循环开始:

  第一步:复制$arr[0]到$value(注意此时$value是$arr[2]的引用),这时数组变成[1,2,1]

  第二步:复制$arr[1]到$value,这时数组变成[1,2,2]

  第三步:复制$arr[2]到$value,这时数组变成[1,2,2]

  综上,最终结果就是1,2,2

  避免这种错误最好的办法就是在循环后立即用unset函数销毁变量:

  忽略Unicode/UTF-8问题

  php编程中,在处理非ascii字符时,会遇到一些问题,要很小心的去对待,要不然就会错误遍地。举个简单的例子,strlen($name),如果$name包含非ascii字符,那结果就有些出乎意料。在此给出一些建议,尽量避免此类问题:

  最好使用mb_*函数来处理字符串,避免使用老的字符串处理函数。这里要确保PHP的“multibyte”扩展已开启。

  数据库和表最好使用unicode编码。

  知道json_code()函数会转换非ascii字符,但serialize()函数不会。

  php代码源文件最好使用不含bom的utf-8格式。

【PHP中容易出错的小细节】相关文章:

科目二中最容易出错的三个小细节05-16

有关科目三容易出错的细节参考09-13

驾考科目三容易出错的情况细节10-03

驾考科目三容易出错的细节是什么07-25

科目二考试易出错的小细节08-31

托福中阅读中最容易出错的词汇汇总09-08

科目二最易出错的三个小细节07-01

最容易出错的英语单词08-25

科目二考试容易出错点06-10

PHP小技巧07-12