文件包含区别|学习笔记

简介: 快速学习文件包含区别

开发者学堂课程【PHP 基础入门课程(下)文件包含区别】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/710/detail/12649


文件包含区别


内容介绍:

一、incude 和 require 的区别

二、与_once 的区别

三、小结


一、incude 和 require 的区别

示例:

⑴被包含文件:data.php

function display ( ){

echo _FUNCTION__;

}

⑵include 和 require 的区别

include 包含不存在文件

include 'd.php';#报错

echo 'hello world';#输出 he11o world

require 包含不存在文件

require 'd.php';#报错

echo 'hello world';#没有输出

1.include 找不到文件报警告错误,不影响后续代码的继续执行

image.png

<?php

#业务逻辑处理

#获取数据(自己处理或者从其他地方拿到数据)

include '50data.php';

#文件包含 require 和 include 区别(找不到文件)

include 'test.php';

echo‘我还能抢救一下!’;

#逻辑处理:权限判定、安全、操作正确性

#显示数据

// require_once '51list.html';

那么它到底能不能输出?

首先把 require_once '51list.html' 注释掉,否则后面会一直报错显示没这个变量。那么50data.php 这个文件是存在的,test.php 这个文件是不存在的。

那么 test.php 报错的时候,影不影响 echo‘我还能抢救一下!’?

运行结果:Warning: include(test. php): failed to open stream: No such file or directory in D:

\server\Apache24\htdocs\52controller.php on line 10

Warning: include0ailled opunlng itosti pip forinalision (include_path=';CAphp\pear) in D:

server\Apache24Nhtdocs\52controller.php on line 10

这个告诉我们找不到这个文件,但是还能抢救一下。

image.png

这说明 include 只是警告错误,不影响后续发展。

当然,如果后续应用很多东西都依赖这个文件的话,那这种东西要在事先开发的时候就处理掉。

2.require 找不到文件报致命错误,后续代码终止执行

image.png

<?php

#业务逻辑处理

#获取数据(自己处理或者从其他地方拿到数据)

include '50data.php';

#文件包含 require 和 include 区别(找不到文件)

// include 'test.php';

require ‘test.php'

echo'我还能抢救一下!’;

#逻辑处理:权限判定、安全、操作正确性

#显示数据

// require_once '51list.html';

刷新。运行结果:Warning: require(test.php): failed to open stream: No such file or directory in D:

\server\Apache24\htdocs\52controller.php on line 12Fatal error: require(0): Failed opening required 'test php' (include_path=':C:\php\pear') in D:

\server\Apache24\htdocs\52controller.php on line 12

image.png

前面还是警告,因为找不到这个,但是报了一个致命错误。找不到就不允许执行了,并且不能抢救。

这就是 include 和 require 的区别


二、与_once 的区别

示例:

include 与 include_once 的区别(require 和 require_once 一样)

include 重复包含文件

include 'data.php'; #输出 display

include 'data.php'; #报错:display 函数在前面已经定义过

include_once 重复包含文件

include_once'data.php';#输出 idis 再 lay

include_once'data.php';#没有任何反应(忽略)

1.没有_once:多次包含,系统会多次加载(如果有函数会报同名错误)

首先,

<?php

#数据提供文件(不会被访问,只会被 PHP 文件包含)

$info =[

'name'=>'犬夜叉',

'age'=>100,

'gender'=>'公'

];

function display(){

echo __FUNCTION__;

}

这是一种函数,且不允许再定一个。

<?php

#业务逻辑处理

#获取数据(自己处理或者从其他地方拿到数据)

//include '50data.php';

#文件包含 require 和 include 区别(找不到文件)

// include 'test.php';

//require‘test.php';(安全)

echo'我还能抢救一下!';

#有无_once 的区别

require '50data.php';

#逻辑处理:权限判定、安全、操作正确性

#显示数据

// require_once '51list.html';

这里建议用 require‘test.php',这个安全。因为通常包含一个文件,目的肯定是为了用它里面的东西。如果文件找不到,就没办法用了,所以建议用这个。运行成功。

image.png

然后如果想再包含一次 require '50data.php' 这个文件,

image.png

运行结果:

我还能抢救一下!Fatal error: Cannot redeclare display() (previously declared in D:\serverApache24\htdocs\50data.php:14) in D:\server\Apache24\htdocs\50data.php on line 15

这里还能抢救一次,但是出现了一个致命错误。Cannot redeclare 不能重生一个 display 函数,因为前面已经生成过了。关键是看报错在50data.php 的15行。image.png

因为这个函数已经定义过了,也就是包含它的时候,它就已经被拿过来。这相当于,第一次包含时替换了它,第二次又包含又替换,这时就会出现一个问题。这里变量无所谓,本身可以重新复制,但是这个函数定义两个同名的,就没办法定义了。image.png

所以,其实问题本质是:Fatal error: Cannot redeclare display( ) (previously declared in D:\server(Apache24\htdocs\52controller.php:26) in D:\server\Apache24\htdocs\52controller.php on line 37

也就是37行出错了,因为前面25号已经定义过了,所以这里就不行了,这就是他们的区别,就是如果多次包含如果带函数就会报错。

2.有_once:只包含一次,系统包含后会记录当前被包含文件是否包含过

 ⑴优势:安全

⑵缺点:效率低

接下来把两个 require '50data.php';注掉,

//require '50data.php';

//require '50data.php';

然后复制这个代码,用 once 再来一次。

require_once '50data.php';

require_once '50data.php';

运行发现没有报错。

image.png

因为当系统报错之后,它就把这个东西复制过来了,而且还记住这个文件已经被包含过了,所以当它再次出现的时候,就会被跳过,不执行了,因此就不会报错了。

所以有 once 就会跳过重复的,没有 once 就不会跳过,依然执行。

但事实上,尽量用没有 once 的这种。因为有 once 的有开销,所有犯的错误,都一定是建立在别人的成本上面。


三、小结

1、include 和 require 的区别是对于找不到文件的错误处理方式

⑴include 给个警告,代码继续运行

⑵require 给个错误,代码终止运行

2、include 和 include_once 的区别

⑴include 会重复包含,可能导致报错(结构重复)

⑵include_once 只会包含一次(有开销)

3、在编程过程中我们应该尽可能保证代码的可运行性

⑴尽可能使用 require 来包含结构和数据文件(容易排错)

⑵尽可能使用 include 来包含外部可能存在的文件

⑶尽可能不用_once 来进行文件包含

①效率低

②是否包含过应该开发者自己控制

相关文章
|
6月前
|
编译器 开发工具 C语言
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
108 0
|
6月前
|
缓存 Ubuntu 网络协议
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
110 1
|
3月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
48 0
|
C语言
【文件处理】C语言引用外部文件教程
【文件处理】C语言引用外部文件教程
290 0
|
Linux Shell C++
【Linux初阶】进程程序替换 | 初识、原理、函数、应用 & makefile工具的多文件编译
替换初识,替换原理,替换函数理解和使用,makefile工具的多文件编译,进程替换应用(简易命令行实现)
177 0
【Linux初阶】进程程序替换 | 初识、原理、函数、应用 & makefile工具的多文件编译
|
Java 应用服务中间件 容器
javaweb项目中引用带有dll文件处理方式
javaweb项目中引用带有dll文件处理方式
|
存储 安全 Shell
|
安全 PHP Apache
8.文件包含实战
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
8.文件包含实战
|
安全 PHP 开发者
文件包含实现|学习笔记
快速学习文件包含实现
文件包含实现|学习笔记