1、概要

   require()语句的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。

  require的使用方法如:require("myfile.php"),这个语句通常放在PHP脚本程序的最前面。PHP程序在执行前,就会先读入require()语句所引入的文件,使它变成PHP脚本文件的一部分。include使用方法和require一样如:include("myfile.php"),而这个语句一般是放在流程控制的处理区段中。PHP脚本文件在读到include()语句时,才将它包含的文件读取进来。这种方式,可以把程式执行时的流程简单化。

  • incluce在用到时加载
  • require在一开始就加载
  • _once后缀表示已加载的不加载

  PHP系统在加载PHP程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行。include的文件中出错了,主程序继续往下执行,require的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require。

  require()和include()语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()可以使用echo("ab")形式,也可以使用echo "abc"形式输出字符串abc。require()和include()语句也可以不加圆括号而直接加参数。

  include_once()和require_once()语句也是在脚本执行期间包括运行指定文件。此行为和include()语句及require()类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。

2、详情

2.1 报错

  include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

  require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

  用例子来说话,写两个php文件,名字为test-include.php和test-require.php,注意相同的目录中,不要存在一个名字是test-nothing.php的文件。

test-include.php

<?php

include 'test-nothing.php';

echo 'abc';

?>

test-require.php

<?php

require 'test-nothing.php';

echo 'abc';

?>

  浏览http://localhost/test-include.php,因为没有找到test-nothing.php文件,我们看到了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:

Warning: include(test-nothing.php) [function.include]: failed to open stream: No such file or directory in D:\www\test-include.php on line 2

Warning: include() [function.include]: Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2

abc

浏览http://localhost/test-require.php,因为没有找到test-nothing.php文件,我们看到了报错信息,但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:

Warning: require(test-nothing.php) [function.require]: failed to open stream: No such file or directory in D:\www\test-require.php on line 2

Fatal error: require() [function.require]: Failed opening required 'test-nothing' (include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2

2.2 条件引用

  include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。

  例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

if($some){

  include 'somefile.php';

}

  但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

if($something){

  require 'somefile.php';

}

  下面的例子充分说明了这两个函数之间的不同:

$i = 1;

while ($i < 3) {

  require "somefile.$i.php";

  $i++;

}

  可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不是我们想要的,可以看出这段代码希望在每次循环时,将不同的文件包含进来,如果要完成这个功能,只能使用函数include():

$i = 1;

while ($i < 3) {

  include "somefile.$i.php";

  $i++;

}

2.3 文件引用方式

  include()执行时需要引用的文件每次都要进行读取和评估,require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量。

requir与include的区别相关推荐

  1. jsp:include和%@include%的区别

    <%@include%>和<jsp:include>的区别,发现了一些东西的. <%@include%>:页面请求之前预编译,所有代码包含进来之后,一起进行处理,把 ...

  2. 指令include和动作include的区别

    1. 指令include <%@include file="footer.jsp" %> 在hello.jsp中包含该页面 <%@ page language=& ...

  3. jsp中动态include与静态include的区别

    JSP中动态INCLUDE与静态INCLUDE的区别 动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" f ...

  4. <%@include%>和<jsp:include>区别浅谈

    jsp中include有两种方式: 1.指令元素include:<%@ include file=""%> 2.动作元素include:<jsp:include ...

  5. Forward与include的区别

    Forward与include的区别 jsp:include标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入,是将包含的文件放在JSP ...

  6. Android Makefile中inherit-product函数简介,以及与include的区别

    在 Android Makefile 中时不时会看见 inherit-product 函数的使用,类似下方这样:         $(call  inherit-product,  vendor/do ...

  7. php if require,php echo()和print()、require()和include()函数区别说明

    简单总结echo()和print().require()和include()等易混淆函数的区别 1.echo和print的区别 PHP中echo和print的功能基本相同(输出),但是两者之间还是有细 ...

  8. @include与jsp:include的区别

    1.可以使用一个JSP指令或者一个标准行为,在JSP页面中引入其他的页面片段. 2. include指令:在翻译阶段(将JSP页面转换成servlet的阶段),JSP的include指令会读入指定的页 ...

  9. C语言中,#include 和#include 的区别和注意点

    C语言中包含文件有两种包含符号,一个是<>尖括号,另一个是""双引号.那么这两个有什么区别呢? 首先在本地建立一个空文件,命名为stdio.h. 然后再建立一个C文件, ...

最新文章

  1. RedisJson 横空出世,性能碾压ES和Mongo!
  2. CNNIC互联网报告:中国网民超8亿 前沿科技进展显著
  3. Leetcode 350 两个数的交集2
  4. 强生进军医疗机器人、Deepmind利用深度学习算法检查乳腺癌X光,AI医疗的风口已到来?...
  5. 光纤布拉格光栅matlab,matlab对各种光纤光栅的仿真
  6. 【解题报告】Leecode 384. 打乱数组——Leecode每日一题系列
  7. shell脚本详解(一)——Shell编程规范与变量
  8. Unity3d-跨平台(二)
  9. python slice函数怎么取列表的最后一个数_python slice函数_python中slice函数如何实现?...
  10. ndk 编译 ffmpeg
  11. java mouseclicked_我用mouseClicked没办法被监听,求大神看看怎么回事
  12. HDU 1058 Humble Numbers(DP,数)
  13. 【优化求解】基于matalb遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】
  14. python 伪原创 中文近义词工具包【转】
  15. seckill配置补发
  16. 大学计算机应用基础第二版习题答案,《大学计算机应用基础》各章习题参考答案...
  17. ZZULIOJ:1138: C语言合法标识符
  18. android手机变微软手机号码,微软Your Phone未来将能让你用电脑远程控制拨打Android手机电话...
  19. SQL 四大功能DDL/DML/DCL/TCL
  20. “地表最贵iPhone”到货,iPhone XS 系列手机等你来测!

热门文章

  1. 中国管道防爆阻火器市场投资分析与需求前景预测报告2022-2028年
  2. linux 山东大学 试卷_绝密·启用前丨《2019年山东大学研究生高考试题》
  3. 共享文件夹—— 一个实现Mac与PC互传文件,维护同一个文件夹简单的方法
  4. sublime 正则跨行匹配
  5. 我也是从寒门走出来的,程序员这个职业是我最好的选择!
  6. 2020年烟花爆竹经营单位主要负责人试题及答案及烟花爆竹经营单位主要负责人实操考试视频
  7. Codeforces——791A Bear and Big Brother
  8. 【数据结构(C语言描述)】环形队列
  9. rails官方指南--建一个简易博客
  10. linux定时每隔多少天,Linux中Cron任务间隔执行:每隔几分钟/几小时/几天