PHP 易错知识点整理

转载 2017年01月18日 23:11:08

PHP 易错知识点整理

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

PHP 易错知识点整理

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

5.注意isset和 empty的区别

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

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

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

7.foreach循环后留下悬挂指针

PHP 易错知识点整理

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

PHP 易错知识点整理

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

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函数销毁变量:

PHP 易错知识点整理

8.忽略Unicode/UTF-8问题

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

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

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

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

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

PHP 易错知识点整理

PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行$r =...
  • yxb0922
  • yxb0922
  • 2016年12月09日 16:50
  • 76

C语言易错点总结

关于C语言使用时的易错点总结。
  • kang___xi
  • kang___xi
  • 2017年07月28日 09:15
  • 323

python-易错知识(二)

一.python流程控制 1.if-else if condition_1: statement_block_1 elif condition_2: statement_block_...
  • shursulei
  • shursulei
  • 2017年08月07日 21:33
  • 174

C++易错知识点整理

构造函数 析构函数 复制构造函数 组合类的构造函数 const 异常接口声明 异常处理中的构造与析构 类的派生 继承方式 虚基类 派生类的构造函数 派生类的复制构造函数 类的内联成员函数 动态创建基本...
  • qq_21397217
  • qq_21397217
  • 2016年06月13日 12:22
  • 1697

JavaSE复习总结(一)

JavaSE复习总结(一) 基础常识 1.JVM,JRE,JDK JRE = JVM + 相关类库 JDK = JRE + 工具  2.下载安装jdk,设置path环境变量 3.第一个jav...
  • wangligong
  • wangligong
  • 2016年07月24日 00:19
  • 1298

ASP.NET C#注意点,混淆点和易错点

1.ExecuteNonQuery()函数执行 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1 ...
  • u010792238
  • u010792238
  • 2014年05月17日 20:15
  • 743

C语言易混易错知识点

1、声明可变长数组 Int a[*];   // 可变长数组不是动态的,可以变化的是数组大小 这样的写法不能用在全局或者共用体里 2、字符常量 字符常量只能用单引号括起来,不能用双引号。 字符常量只...
  • sinat_14866987
  • sinat_14866987
  • 2015年05月14日 15:28
  • 584

iOS中 项目开发易错知识点总结 韩俊强的博客

iOS中 项目开发易错知识点总结 韩俊强的博客
  • qq_31810357
  • qq_31810357
  • 2016年08月18日 19:08
  • 2382

Java易错知识点笔记

目录组合与继承 值类型和引用类型的存储位置 数值类型的符号 默认值 方法签名 变量 static 数据类型大小 this 垃圾回收器 finalize 初始化 惰性初始化 初始化顺序 非静态实例初始化...
  • qq_21397217
  • qq_21397217
  • 2016年06月13日 12:27
  • 1845

JavaScript 易错知识点整理

前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉...
  • ZGhekuiwu
  • ZGhekuiwu
  • 2016年12月19日 17:51
  • 6504
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP 易错知识点整理
举报原因:
原因补充:

(最多只允许输入30个字)