include,require,include_once,require_once之间的区别

原创 zhaoliang  2015-08-07 22:10  阅读 1,168 views 次

require和include都属于服务器端引用(Server Side Includes)中的常用方法,它们有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。

require和include只是php中的一种语言特性,而不是函数,它们和函数有许多不同的地方。比如:require所包含的文件中不能包含控制结构,而且不能使用return这样的语句,在require所包含的文件中使用return语句会产生处理错误,当然如果在require被包含文件中有函数方法,在这些函数方法中还是可以使用return的。

如果php配置文件php.ini中控制是否允许访问URL的配置项Fopen wrappers是打开的(默认情况下是打开的),就可以使用URL来指定文件的位置从而实现远程文件的调用,而对于项目的安全来说是存在较大的除患的。

在使用require和include语句时要特别的注意:在被包含的文件中,处理器是按照html模式来解释其中的内容的,处理完被包含的内容后又恢复到php模式。所以如果需要在被包含文件中使用php语法,就要使用正确的php开始和结束标记来把这些语句包含进去。

require

require包含文件的时候是绝对的包含,如果被包含的文件不存在那么会产生一个致命错误(fatal error),在错误发生后下面的脚本程序将不会执行,此外,因为require语句相当于将另一个源文件的内容完全复制到本文件中,所以一般将其放在源文件的起始位置,用于引用需要使用的公共函数文件和公共类文件等,像C语言的预处理程序#include一样都是写在文件头位置,引入外部文件。

include

include的包含文件是相对的,如果被包含文件不存在,那么会产生一个warning警告,但是下面的脚本程序继续执行,此外, include包含的文件一般写在程序执行中。

require_once和include_once

require_once和include_once语句分别对应于require和include语句。require_once和include_once语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。

include语句和require区别

在应用方法上,两者是类似的,凡是在require语句中没有明确说明不能适用于include的部分外,require语句的功能完全适用于include语句,但两都还是存在一些区别:

1.报错处理结果不同:

在使用require语句调用文件时,如果调用的文件没找到,require语句会输出致命错误信息,并且立即终止脚本的处理;而include语句在没有找到文件时虽然会显示错误信息,但不会终止脚本的处理。

2.程序加载方式不同:

使用require语句调用文件时,只要程序一执行,require语句不管出现在什么位置,对应的逻辑语句会不会执行到这个require语句,它都就会立刻调用外部文件,引用的文件就会作为主程序的一部分来运行,因此通常放在程序的开始位置,不能在条件控制语句和循环语句中使用;而通过include语句调用外部文件时,只有程序执行到该语句时,才会调用外部文件,你可以根据不同情况的,在条件控制语句和循环语句中使用include来包含不同的文件。

因此要特别注意一点,require语句有一点强,不管程序是否真的需要引用的文件,只要你使用require语句,它都会把他们包含进来!即使你是在条件控制语句中使用这个函数进行包含,哪怕是那个条件不为真,引用文件也会被包含进来!形成了僵尸,在运行过程中这些僵尸是不起任何可见作用的,但是很明显它会加重负担,所以这一点要特别注意!例如:

3.变量作用域不同:

require语句中的变量继承require语句所在位置的变量作用域,所有在require语句的位置可以访问的变量,在 require语句所包含的文件中都可以访问,如果require语句位于一个函数内部,那么被包含文件内的语句都相当于定义在函数内部。

本文地址:http://blog.58cm.cn:8088/archives/108.html
版权声明:本文为原创文章,版权归 zhaoliang 所有,欢迎分享本文,转载请保留出处!

评论已关闭!