继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

透过现象看本质,区分php中require,include

学海无涯乐悠悠
关注TA
已关注
手记 2
粉丝 8
获赞 8

网上看了很多说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,钱包不要了,走起!如果你墨迹两天找不到,你会被炒鱿鱼,换人,飞机还是要起飞的。
理解很多不准确,不到位,欢迎吐槽,指正。

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP

热门评论

echo "hello world";


查看全部评论