zoukankan      html  css  js  c++  java
  • include和require的区别

    include和require的区别
     准备在一个PHP的开源程序上做点二次开发,借此机会想对PHP进行一下系统的学习。曾经也大概的了解过一点PHP,但因为工作中一直没有用到这门语言,所以慢慢也放下了。走了这么久的弯路才明白,项目驱动是最好的学习方式。只有当你需要用到一门语言的时候,去学习它才会有比较好的效果,而且也不容易忘记。

    在二次开发之前得先了解一下原先程序的整个结构,在看源码的过程中发现有大量的引入语句,记得之前就对PHP中的include和require的区别一直很含糊,不能再用这样的态度对学习,因此特地停下来了解一下PHP和include和require的联系和区别。

    首先include和require都是引入指定的文件。_once表示只引入一次,即之前已经引入过的不再引入。

    例如1.php中有句简单的打印 echo '1 </br> ' 下面的程序运行的结果:

    1. <?php
    2. include '1.php';
    3. require '1.php';
    4. include_once '1.php';
    5. require_once '1.php';

    将是

    1

    1
    而不是
    1

    1

    1

    1

    如果将_once引入的语句放在include和require上面,结果将是

    1

    1

    1

    1

    include与require的区别

    1、加载失败的处理方式不同

    include与require除了在处理引入文件的方式不同外,最大的区别就是:
    include在引入不存文件时产生一个警告且脚本还会继续执行,
    require则会导致一个致命性错误且脚本停止执行。

    1. <?php
    2. include 'hello.php';
    3. echo 'world';
    4. ?>

    如果hello.php不存在,echo ‘world’这句是可以继续执行的。

    1. <?php
    2. require 'hello.php';
    3. echo 'world';
    4. ?>

    如果hello.php不存在,echo ‘hello’这句是不会执行的,到require时就停止了。

    2、include()是有条件包含函数,而 require()则是无条件包含函数。

    1. if(FALSE){
    2. include 'file.php'; //file.php不会被引入
    3. }
    4. if(FALSE){
    5. require 'file.php'; //file.php将会被引入

    3、文件引用方式

    include有返回值,而require没有

    1. $retVal = include(’somefile.php’);
    2. if(!empty($retVal)){
    3. echo "文件包含成功";
    4. }else{
    5. echo "文件包含失败";
    6. }

    include()执行时需要引用的文件每次都要进行读取和评估,
    require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)

    可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
    若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),

    require通常使用方法,这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

    include通常使用方法,这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化

    另外关于include和require后面是否加括号的问题,

    理论上来说:include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低,所以后面能不加括号就不加括号。

  • 相关阅读:
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb学习总结(二十七)——jsp简单标签开发案例和打包
    在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
    javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
    javaweb学习总结(二十五)——jsp简单标签开发(一)
    javaweb学习总结(二十四)——jsp传统标签开发
    javaweb学习总结(二十三)——jsp自定义标签开发入门
    javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    javaweb学习总结(二十一)——JavaWeb的两种开发模式
  • 原文地址:https://www.cnblogs.com/wwlww/p/8413347.html
Copyright © 2011-2022 走看看