网上看了很多说php中require与include区别的博客和帖子,感觉心中一万个为什么,越看越是迷糊。
我总结了一下,大概从本质上是这样区别的:
1.PHP是是一种服务器脚本语言,她与C、C++、JAVA都不同,C语言是要先编译,转换称计算机可以理解的二进制,JAVA是先转换出字节码,而PHP呢,我理解是先初步编译,叫预编译吧,简单检查一下语法,包含一下文件等等,不去分析程序里面有没有问题,然后在需要执行的时候边编译边执行。举个例子,<?php echo 'true'; echo 1/0;>,程序会输出 true和一个警告Warning。正确的代码被执行了,javascript也是,但其他语言就会不能通过编译。
2.搞清楚上面这个问题,就要说require和include的区别了:
require是PHP在初步编译的时候,将这个函数转换成为引入的代码。例如index.php:require('config.php');在用户访问index.php的时候,先将config.php中的代码搬过来,放到require的位置,这个原理就是简单替换,查找index.php文件中的require()函数,将参数指向的文件内容替换成代码。很简单,不管程序的逻辑。举个例子,index.php:if(1<0){require('config.php');},是不是觉得require('config.php');不会被执行?错了,上面说了,简单替换,像是字符替换的原理一样,与程序无关。config.php仍是被包含进去了。
而include就不一样,include不是简单的替换。php初步编译的时候不会替换include包含的文件内容。include是在初步编译后,程序边编译边执行的时候才编译的。上面的例子改成index.php:if(1<0){include('config.php');},config.php就不会被包含进来。
别人说require要尽量放文件前面,注意是尽量,不明白为什么说这么含糊的原因,如果你知道简单替换的原理就知道了,如果你放到后面,可能会在初步编译的时候出现意想不到的问题。因为require是不管你需要不需要,都是会被引进来的。
require为什么会报错误,include为什么只是警告,你也明白了吧,初步编译发现的问题都是error问题,会中断执行,例如语法问题,require也不例外。include只是警告,同样是找不到文件的问题,include为什么是警告?因外她不是初步编译发现的问题,飞机已经起飞,一般不会因一个乘客找不到钱包了就降落,就像include,初步编译时候,即登机的时候没发现问题,程序运行了,include找不到文件,报错了,那就不管了,接着运行吧,得到啥结果就啥结果。但如果飞机没起飞,你发现找不到钱包,就像require找不到文件,要吗飞机等你找到再飞,要么你不要了上机,要么飞机不等你了,反正是有了一个决定后飞机才飞走,就是要中断一下。php是个好司机,立即中断,等你修改!改了文件位置,可以了,找到了,起飞;删除了require,钱包不要了,走起!如果你墨迹两天找不到,你会被炒鱿鱼,换人,飞机还是要起飞的。
理解很多不准确,不到位,欢迎吐槽,指正。
共同学习,写下你的评论
评论加载中...
作者其他优质文章