我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

最近苏南大叔写了node下的requireimport区别。就忽然间想起,很多年前曾经在一篇文章里面埋过一个坑,php的经典面试题:requireinclude有啥区别。那么,本文中苏南大叔就来填一下这个坑。说说在php中,includerequire的最大区别。

苏南大叔:php代码中,使用include和require有什么区别? - php-include-vs-require
php代码中,使用include和require有什么区别?(图4-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述php中,使用include语句和require语句,有什么具体的不同之处。本文测试环境:win10php@5.6

区别之处

经过不断的经验总结,在实际php应用中,includerequire几乎是没有什么区别的,都是用来引入某个文件的。经过不断测试,两者区别在于:当被引用的文件不存在的时候,会有较大的区别。

当被引用的文件不存在的时候,

  • include抛出异常,但是会继续执行,也就是说:include处理异常为warning。用于引入html代码片段,即使文件不存在,也不会退出执行。
  • require抛出异常,拒绝执行,也就是说:include处理异常为fatal error。用于引入类库文件,如果不存在就直接报错退出执行。

现在假设不存在404.php这个文件。

include不存在的文件warning

苏南大叔:php代码中,使用include和require有什么区别? - include报错不阻碍执行
php代码中,使用include和require有什么区别?(图4-2)

测试代码demo_include.php如下:

include ("404.php");
echo "continue";

测试结果:

Warning: include(404.php) [function.include]: failed to open stream: No such file or directory in demo_include.php on line 4
Warning: include() [function.include]: Failed opening '404.php' for inclusion (include_path='.;C:\php5\pear') in demo_include.php on line 4
continue

require不存在的文件fatalerror

苏南大叔:php代码中,使用include和require有什么区别? - require报错阻碍执行
php代码中,使用include和require有什么区别?(图4-3)

demo_require.php

require ("404.php");
echo "continue";

测试结果:

Warning: require(404.php) [function.require]: failed to open stream: No such file or directory in demo_require.php on line 4
Fatal error: require() [function.require]: Failed opening required '404.php' (include_path='.;C:\php5\pear') in demo_require.php on line 4

网传的不一致

循环中表现一致,下述代码测试,两者表现一致。

//require
$i = 1;
while ($i < 3) {
    require "./a$i.php";
    $i++;
}
//include
$i = 1;
while ($i < 3) {
    include "./a$i.php";
    $i++;
}

处理被包含文件的内部错误时,表现一致。

比如被包含文件404.php内调用了一个不存在的函数test()的时候,都会导致fatalerror程序停止执行。

苏南大叔:php代码中,使用include和require有什么区别? - 内部fatalerror
php代码中,使用include和require有什么区别?(图4-4)

参考文献

总结

php中,includerequire的区别在于:被引用的文件不存在时,两者的态度不一致。include表示可以接受(warning),require则表示完全不能接受(fatal error)。

苏南大叔的理解就这么多,如果您有不同看法,欢迎留言。更多php相关经验文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php