紫影基地

 找回密码
 立即注册
查看: 373|回复: 0

[PHP学习] php的 include_once 什么意思,【后端开发】php关于include_once与include之间的区别详解...

[复制链接]
阅读字号:

2002

主题

2117

帖子

21万

积分

超级版主

Rank: 8Rank: 8

积分
210303
发表于 2022-10-31 21:50:15 | 显示全部楼层 |阅读模式

include如果引入两个文件,都有一个相同的函数名,那么就会发生重定义的错误。使用include_once可以避免此错误,一般都_once用的比较多。应该根据实际情况需求include和_once的区别。

include和require区别

当要包含的文件不存在时,include产生一个警告(Warning),该语句后面的程序会继续执行;而 require则导致一个致命错误(Fatal error),程序就此终止。

include_once和require_once

应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

1.incluce在用到时加载,这个函式一般是放在流程控制的处理区段中

2.require在一开始就加载,这个函式通常放在 PHP 程式的最前面

3._once后缀表示已加载的不加载

关于这个问题网上一搜一大把的,include和include_once没什么大研究,区别就是include不管你之前有没有引入过该文件,都仍然引入,include_once则检查文件有没有已经在前面引入过了,如果有了就不再引入了

一般推荐用require_once,所以建议楼主多查查include和require的区别,网上很多。这里简单说两个:

incloude引入的文件发送错误或文件不存在,include会发出一条警告并继续执行程序,而require则会产生致命错误并终止程序。

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

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

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

自从认识include和include_once的区别后 一直使用include_once ,认为它只加载一次,可以避免重复加载,而且貌似自己也无法很好的确定是否已经重复加载,原来自己一直都是错误的。

其实也有好处吧 如果项目是几个人开发的话,include_once倒也比较好的

include_once执行顺序

尝试解析文件的绝对路径, 如果能解析成功, 则检查EG(included_files), 存在则返回, 不存在继续

打开文件, 得到文件的打开路径(opened path)

拿opened path去EG(included_files)查找, 是否存在, 如果存在则返回, 不存在继续

编译文件(compile_file

最近关于apc.include_once_override的去留, 我们做了几次讨论, 这个APC的配置项一直一来就没有被很好的实现过.

在这里, 我想和大家在此分享下, 这个问题的原因, 以及对我们的一些启示.

关于使用include还是include_once(以下,都包含require_once), 这个讨论很长了, 结论也一直有, 就是尽量使用include, 而不是include_once, 以前最多的理由的是, include_once需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载.

诚然, 这个理由是对的, 不过, 我今天要说的, 是另外一个的原因.

我们知道, PHP去判断一个文件是否被加载, 是需要得到这个文件的opened_path的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 09:55 , Processed in 0.082738 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表