首页 > 编程语言 >PHP中include和require的区别详解

PHP中include和require的区别详解

时间:2023-01-05 22:32:23浏览次数:53  
标签:语句 文件 PHP require test include php


PHP中include和require的区别详解

1、概要

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

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

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

伪编译过程,可使程序运行速度加快。但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 报错

继续运行下边的代码。

停止运行下边的代码。

  用例子来说话,写两个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
}

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

$i = 1;
while ($i < 3) {
require
  $i++;
}

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

$i = 1;
while ($i < 3) {
include
  $i++;
}

2.3 文件引用方式

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

 

 

作者:虾皮★csAxp

标签:语句,文件,PHP,require,test,include,php
From: https://blog.51cto.com/kenkao/5991990

相关文章

  • C# to PHP base64 encode/decode
    ​​http://stackoverflow.com/questions/257462/c-sharp-to-php-base64-encode-decode​​We shouldprobablyURLEncodeyourBase64stringontheC#sidebeforeyou......
  • 在C#中获取如PHP函数time()一样的时间戳
    c#中没有象PHP一样的time()时间戳函数,但有DateTime.Now.Ticks用来计算时间差。此属性的值为自0001年1月1日午夜12:00以来所经过时间以100毫微秒为间隔表示时的数......
  • php+vscode+nginx+Xdebug 安装教程(vscode用debug的调试php)
    环境:window10+ phpstudy+vscode php全篇用php8.0.2,也可以用其他的版本,但要注意所有配置路径都要统一版本一、环境变量将你正在使用的php加入环境变量。因为phpstudy......
  • Unity(支持WebGL)+PHP(Workerman的Gateway)用Websocket协议实现匹配对战(摇骰子为例)1
    目录服务端PHP(Windows下演示)安装PHP启动服务器结束服务器客户端Unity(版本Unity2021.3.5f1)1.发布Windows客户端ws/wss(不发布小游戏,请忽略此点)演示工程地址扩展发布其他......
  • 基于libmemcached为php扩展memcached服务
    基于libmemcached,php扩展memcached的安装张映一,为什么要装memcached扩展memcached的1.2.4及以上增加了CAS(CheckandSet)协议,对于同一key的多进行程的并发处理问题。这......
  • php发送get、post请求的几种方法
    ​方法1:用file_get_contents以get方式获取内容 <?php$url='http://www.domain.com/';$html=file_get_contents($url);echo$html;?>  方法2:用fopen......
  • php&.net对称压缩解压缩探讨
    C#客户端访问PHPSOAPWebService,当传输大量文本数据时,可以通过压缩减少网络传输。C#在System.IO.Compression命名空间下提供了两个类GZipStream类和DeflateStream类来进行......
  • 简单的C#&PHP对称加解密
    byte[]ctxbytes=System.Text.Encoding.UTF8.GetBytes(ctx);byte[]keybytes=System.Text.Encoding.UTF8.GetBytes(key);intctxLen=ctxbytes.Length......
  • as3与php交互实现总结
     目前flash在各方个面的应用越来越广,而flash也不单只是注重自身绚丽的效果,也需要和外界程序交换数据,以实现更强大的功能,随着as3的到来,flash和外部交互的方式也越来越简便......
  • PHP异步调用实现方式
    PHP异步调用实现方式浏览器和服务器之间只一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求输出相应的程序,不能保持持久连接。......