zoukankan      html  css  js  c++  java
  • PHP include()和require()方法的区别

    PHP的include()和require()是两种包含外部文件的方法,对于这两种方法有什么区别,很多初学者可能不是很明白。下面总结一下PHP include()和require()的区别:

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

    include()会产生一个警告,而require()则导致一个致命的错误(出现错误,脚本停止执行)

    require() :如果文件不存在,会报出一个fatal error.脚本停止执行

    include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行

    这里特别要注意的是:使用include()文件不存在时,脚本继续执行,这种情况只出现在PHP 4.3.5之前

    推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

    2.php性能

    对include()来说,在 include()执行时文件每次都要进行读取和评估;

    而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。

    这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

    另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),

    因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

    3.二种方式提供不同的使用弹性。

    require 的使用方法如 require("./inc.php"); 。通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。

    include 使用方法如 include("./inc/.php"); 。一般是放在流程控制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简单化。

    require即使在条件位FALSE的时候也会被包含,而include只会在执行到改位置时候才会去执行。

    require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。require_once()函数的作用和 require() 是几乎相同的

    include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。include_once()函数的作用和 include() 是几乎相同的

    require_once的作用是会检查之前是否加载过该文件,如果没有加载则加载 如果加载过就不再次加载,比如某文件定义了一个类型 如果两次加载该文件会出现错误


    还信誓旦旦的解释:include()是有条件包含函数,而require()则是无条件包含函数。

    但是这是很久之前的事了,现在的php,require与include确实有区别,笔者测试的是5.3以上版本测试结果如下:

    发现这两种结构除在性能和在如何处理包含失败之外,其他完全一样。

    1.在性能方面

    测试发现当require与include在性能方面差别不大,觉得这方面可以不用考虑(可能是我测试的样例不够多吧)

    eg:

    [php] view plain copy
    1. <pre name="code" class="php">$startTime=time();  
    2. $startMemoryUsed=memory_get_usage();    
    3. require "a1.inc";  
    4. $endMemoryUsed=memory_get_usage();  
    5. $endTime=time();  
    6. $usedMemory=($endMemoryUsed-$startMemoryUsed)/1024;   
    7. print_r($usedMemory);//1.6171875  
    8. echo '</br>';  
    9. print_r($endTime-$startTime);  
    10.   
    11. /*$startTime=time(); 
    12. $startMemoryUsed=memory_get_usage();   
    13. include "a1.inc"; 
    14. $endMemoryUsed=memory_get_usage();   
    15. $endTime=time(); 
    16. $usedMemory=($endMemoryUsed-$startMemoryUsed)/1024;  
    17. print_r($usedMemory);//1.6171875 
    18. print_r($endTime-$startTime);*/  
    
    

    2.在包含错误处理方面

       在包含失败 时,include()产生一个警告并继续执行,而require()则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用 require(),否则就用include()

    [php] view plain copy
    1. include "a9.inc";//<span style="font-family: Arial, Helvetica, sans-serif;">a9.inc不存在会产生一个警告</span>  
    2.   
    3. require "a10.inc";//a10.inc不存在会产生一个致命错误  

    补充:include,require包含作用域

    文件a2.inc

    [php] view plain copy
    1. $name="lidquan";  
    2. class Teacher{  
    3.     public function show(){  
    4.         echo 'my job is teacher</br>';  
    5.     }  
    6. }  
    7. function showName(){  
    8.     echo 'a2.inc 里面的方法';  
    9. }  

    文件 index.php

    [php] view plain copy
    1. function a(){  
    2.     require "a2.inc";  
    3.     $teacher =new Teacher();  
    4.     $teacher->show();  
    5. }  
    6.   
    7. a();//正常调用  
    8.   
    9. showName();//正常调用  
    10.   
    11. var_dump($name);//提示$name没有定义  

    结果截图如下:


    关于包含文件后作用域问题总结如下:

    1.所有在被包含文件中定义的函数和类在被包含后,在包含文件里都具有全局作用域

    2.被包含文件的变量的作用域,随着包含位置的变化而变化。比如如果是在函数中包含,被包含文件的变量是局部变量

    备注:搞编程,要有一颗严谨负责的心


    以上就是PHP include()和require()方法的区别。

  • 相关阅读:
    Win7中隐藏的上帝模式——GodMode
    C# 中有关 using 关键字
    数据结构 实验三  二叉树
    数据结构 实验二 栈
    指针知识(六):指针的指针
    指针知识(五):指针(pointer)和常量(const)
    指针知识(四):指针数学计算
    指针知识(三):指针与数组
    指针知识(二):指针初始化
    指针知识(一):指针声明
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465257.html
Copyright © 2011-2022 走看看