include、include_once、require、require_once的区别

来源:互联网 发布:win7人工智能 编辑:程序博客网 时间:2024/05/26 02:52
用法:以include为例
(1)include '要引入的文件的全路径';
(2)include ('要引入的文件的全路径');
(3)$name = '要引入的文件的全路径'; include "$name";如果很多地方需要引入这个文件,并且这个文件路径不固定,需要经常改,可以用这种方法,这样可以避免如果需要改变文件路径的时候需要改动太多的地方。
特点:
include会重复引入同名文件,如果引入的文件不存在,它依然会继续向下执行。
include_once不会引入同名文件,如果引入的文件不存在,让依然会继续向下执行。
require会重复引入同名文件,如果引入的文件不存在,它不会继续向下执行。

require_once不会重复引入同名文件,如果引入的文件不存在,它不会向下执行。

如果我们在引入某些文件(比如获取数据库链接,打开文件等。我们建议大家使用——once这种方式来引入文件。),防止资源浪费。

文件在引入的时候的机制(require)
当我们在一个文件中引入另一个文件时,其实是把另一个文件的执行结果放在引入文件的位置。而不是把被引入的文件的代码放到引入文件的位置。
在我们引入一个文件时,在默认情况下,成功返回1
程序也可以根据实际情况返回数据,比如一个数组
在引入文件过程中,当遇到被引入文件的return语句时,引入过程将终止,返回主文件,继续执行。

一个案例:

B.php


C.php


运行B.php


为什么会错呢?
第一步:首先程序会先把整个程序加载到内存,就相当于把下面的代码加载到内存了


注意:此时上面所有的代码都没开始执行,上面的require './C.php'只是作为一行代码待在第5行,此时也不会去执行C.php里面的代码
第二步:程序加载到内存后,程序开始从上往下执行,首先执行test();,因为在第一步的程序加载到内存中这一步已经把test(){echo …}加载到内存了,所以上面可以直接调用,能正确执行,接着执行test2(),test2()函数属于C.php里面的代码,此时还没有被加载到内存中来,所以无法在内存中找到test2()函数的定义,所以这里会报错,但是如果我们把test2()挪到require './C.php’下面就不会报错了,因为在执行到require这一行来的时候才会去执行C.php里的代码,当执行C.php里的代码的时候也会重复以上两步,先把代码加载到内存(不过此时会加载到和B所在的同一块内存)里面如果有函数,就把函数的定义加载到代码区。然后开始执行C.php里的代码,不过此时C.php执行代码所处的环境是B.php所在的环境。然后把执行结果返回。





阅读全文
0 0
原创粉丝点击