【php】include、include_once、require、require_once的区别【转】

首先要说的是,include、include_once、require、require_once的核心功能都是一样的,都是相当于把目标网页的代码生硬地直接复制过来。

基本上,如果不从性能上考虑,使用include、include_once、require、require_once都可以达到基本的效果。基本上爱怎么用就怎么用。

其中的微小差别如下:

例如1.php中有句简单的打印语句:

<?php 
echo "1";
?>

下面的程序运行的结果:

<?php
include '1.php';
require '1.php';
 
include_once '1.php';
require_once '1.php';
?>

为2个1,而不是4个1,因为include和require都是引入指定的文件,_once表示只引入一次,即之前已经引入过的不再引入。

如果写成:

<?php
include_once '1.php';
require_once '1.php';
include '1.php';
require '1.php';
?>

结果将是4个1。
值得注意的是,_once虽然表示之前已经引入过的不再引入,但这个语句不会检查所引入的网页中的代码是否相同,比如有两个代码一模一样的网页untitled.html与untitled1.html皆为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
 
<body>
</body>
</html>

如果有以下的语句:

<?php
include_once 'untitled.html';
include_once 'untitled1.html';
?>

出来的结果是这样的:

看到相同的部分出现两次。_once只是通过文件名来判断之前已经引入过是否再引入。

因此_once并不能防止不同名却同一个资源多次引入的现象。

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

比如a.php如果不存在,以下的代码,依旧会输出b:

<?php
include 'a.php';
echo 'b';
?>

而:

<?php
require 'a.php';
echo 'b';
?>

则不会。
同时还有如下的区别:

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

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

include有返回值,而require没有

$retVal = include(’somefile.php’);
if(!empty($retVal)){
  echo “文件包含成功”;
}else{
  echo “文件包含失败”;
}

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

require通常使用方法,这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。include通常使用方法,这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

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

文章来自:https://blog.csdn.net/yongh701/article/details/47972483

posted @ 2020-03-04 16:03  小猿笔记  阅读(310)  评论(0编辑  收藏  举报