php的一些易错点

Posted 谨言&慎独_yk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的一些易错点相关的知识,希望对你有一定的参考价值。

1.单引号与双引号的区别

一般用单引号或双引号标识一个字符串。单引号串与双引号串,在php中的处理是不同的。双引号中的内容可以被解释并被替换,单引号串中的内容则被作为普通字符处理。

例如:

$str=6;

echo "str is $str\n";

echo ‘str is $str\n‘;

注:单引号中输出的内容是“所见即所得”的,无论有无变量,都被当做普通字符原样输出。

说明:在定义简单的字符串时,使用单引号是一个更加合适的处理方式。如果使用双引号,php将花费一下时间来处理字符串的转义和变量的解析。因此,建议在定义字符串时,如果没有特别的要求应尽量使用单引号。

2.注意echo和print的区别

PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行$r = print "Hello World"; 变量$r的值将为1。而且代码中echo语句的运行效率要略快于print语句。

3.注意空字符串(‘‘)和NULL的区别

PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,前者是string,而后者是NULL,可见字符串(‘‘)、NULL值相等但类型不等。

4.分清==(等于)和===(全等于)的区别

两者都属于比较运算符,==(等于)只比较值是否相等,而===(全等于)则不但比较值是否相等,还会比较类型是否相等,它更为严格。

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

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

6.require 与include的区别

引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。

require的使用方法如require("MyRequireFile.php");。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include使用方法如include("MyIncludeFile.php");。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。

require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误

include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。

以下为补充:

(1). include有返回值,而require没有。

(2). include()包括并运行指定文件 在处理失败时include() 产生一个警告,被导入的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到include()语句的位置相同的变量范围。你可以导入同一个服务器中的静态页面。

(3). include_once()的作用和include()是几乎相同的

唯一的差别在于include_once()会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入(这项功能有时候是很重要的,比方说要导入的里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个文件,在第二次导入的时候便会发生错误讯息,因为PHP不允许相同名称的函数被重复宣告第二次)。

(4). require()会将目标文件的内容读入,并且把自己本身代换成这些读入的内容 在处理失败时require() 则导致一个致命错。

这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候(PHP 3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0以后就有所改变了,PHP 4.0是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。

(5). 如同include_once(),require_once()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。

(6). require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。

(7). require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

(8). include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。

以上是关于php的一些易错点的主要内容,如果未能解决你的问题,请参考以下文章

5月19日 易错点集合

js基础知识易错点

一些易错点的整理

Java 基础知识的一些易错点

javascript易错点

易错点 默认参数陷阱