zoukankan      html  css  js  c++  java
  • PHP 中 include 和 require 的区别详解

    require() 语句的性能与 include() 相类似,都是包括并运行指定文件。除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误,终止脚本运行;而include 只产生警告(E_WARNING),脚本会继续运行。

    【1】include和require都是语句结构(并不是函数)!!!

    在php官网手册上是划分到了流程控制,这两个语句结构不是函数。

    详情可参考http://php.net/manual/zh/function.include.php

    所以,它可以不加圆括号,直接加引号来包含文件。我习惯不加圆括号。

    1 include '01_var.php';
    2 或者
    3 include('01_var.php');
    4 或者
    5 require '01_var.php';
    6 或者
    7 require('01_var.php');

    2】对于处理失败的方式不同(最主要的区别)

    对于引入的文件找不到情况下。(这里确保当前文件夹下面不存在no.php)

    在01_include_require文件下编写如下代码:

    include 'no.php';
    echo 'End!';//会输出
    

      


     include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

    1 require 'no.php';
    2 echo 'End!';//不会输出

    require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。

    【3】对include和require引入文件的实质


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


    【4】include_once和require_once的作用


    使用方法与不加后缀一样,加上_once后缀 意味着如果该文件中的代码已经被包括进来了,就不会再次包括。因为有些情况下,在脚本执行期间,同一个文件有可能包含超过一次的情况下,为了确保只包含一次,避免函数重定义,或者是变量的重新赋值的问题。

    【5】使用场景


    [1]如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。

    [2]在框架复杂的 php 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。包含文件省去了大量的工作。例如在thinkphp框架index入口引入核心代码就是利用require引入的。

    [3]require通常放在php脚本程序最前面,php再执行程序前,就会先读取require语句引入的文件,使之成为php脚本文件的一部分。

    [4]include 通常用在流程控制的处理部分中,php 脚本在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

    总结:

    1. require, include 遇到错误时处理不同,require出错时,脚本将停止运行,而在使用include的情况下,脚本将继续执行;

    2. 无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。所以使用条件包含时,需要用include;

    3. 带有后缀 _once ,功能和不带后缀的相同。

      include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件。如果已经包含,则不再执行include_once。否则,则必须包含该文件。除了这一点与include完全相同。

      require_once函数确保文件只包含一次。在遇到require_once后,后面再试图包含相同的文件时将被忽略。(随着网站越来越大,可能会出现重复包含某些文件。这也许不是问题,但又是修改了所包含文件的变量后,却由于后面再次包含原来的文件而被覆盖,可能不希望出现这种情况。还可能出现另一个问题,即所包含文件中函数名的冲突。使用require_once就可以解决这些问题。)

  • 相关阅读:
    裸二分图匹配poj1469
    洛谷——P2038 无线网络发射器选址
    洛谷—— P1041 传染病控制
    洛谷—— P1784 数独
    Vijos——T 1092 全排列
    Vijos—— T 1359 Superprime
    高并发解决方案--负载均衡
    request 发送多层字典
    June 11th 2017 Week 24th Sunday
    June 10th 2017 Week 23rd Saturday
  • 原文地址:https://www.cnblogs.com/echojson/p/11454101.html
Copyright © 2011-2022 走看看