加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

require(),include(),require_once()和include_once()区别

发布时间:2020-03-22 06:11:41 所属栏目:PHP教程 来源:互联网
导读:面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。


<?php
define(PHPVERSION,floor(phpversion()));
echo "GLOBALS ARE NICE<br>n";
function goodTea()
{
return "Olong tea tasts good!";
}
?>


和fool.inc:

复制代码 代码如下:


<?php
require ("util.inc");
function showVar($var)
{
if(PHPVERSION==4)
{
print_r($var);
}
else
{
var_dump($var);
}
}
?>


然后在error_require.php中包含这两个文件:

复制代码 代码如下:


<?php
require("fool.inc");
require("util.inc");//此句会产生一个错误
$foo=array("1",array("complex","quaternion"));
echo "this is requiring util.inc again which is also<br>n";
echo "required in fool.incn";
echo "Running goodTea:".goodTea()."<br>n";
echo "Printing foo:<br>n";
showVar($foo);
?>


当运行error_require.php时,输出结果如下:
GLOBALS ARE NICE
GLOBALS ARE NICE

Fatal error:Cannot redeclare goodTea() in util.inc on line 4

如果使用require_once()语句来代替 require()语句,就不会出现上面的错误。我们把error_require.php和fool.inc中的require()语句改为require_once()语句并重命名为error_require_once.php,这是显示结果如下:
GLOBALS ARE NICE
this is requiring util.inc again which is also
required in fool.inc Running goodTea:Olong tea tastes good!
Printing foo:
Array([0] => 1 [1] => Array ([0] => complex [1] = quaternion))

include_once()语句的语法和include()语句类似,主要区别也是避免多次包含一个文件而引起函数或变量的重复定义。

require_once语句有一个引用链,它可以保证文件加入你的程序仅仅只有一次,而且会避开变量值和函数名之间的冲突。

和require_once语句一样,include_once语句把include的功能扩展了。在程序执行期间,将指定的文件包含进来,如果从文件引用进来的程序先前已经包含过的时候,include_once()就不会把它再包含进来。也就是仅仅可以引用同一个文件一次!

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

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

使用 require_once() 和 include_once() 的更多例子见最新的 PHP 源程序发行包中的 PEAR 代码。

返回值和 include() 相同。如果文件已被包含,本函数返回 TRUE。

注: include_once() 是 PHP 4.0.1pl2 中新加入的。

注: 要注意 include_once() 和 require_once() 在大小写不敏感的操作系统中(例如 Windows)的行为

可能不是所期望的。
例子: include_once() 在 Windows 下不区分大小写

复制代码 代码如下:


<?php
include_once("a.php"); // this will include a.php
include_once("A.php"); // this will include a.php again on Windows! (PHP 4 only)
?>


此行为在 PHP 5 中改了,路径先被规格化,因此 C:PROGRA~1A.php 和 C:Program Filesa.php 的实现一样,文件只会被包含一次。

如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。

  win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许Linux下情况不同,暂时还没测试。

  如果一个文件不想被包含多次可以使用include_once或require_once## 读取,可以写入文档数据。

复制代码 代码如下:


<?php
function r($file_name) {
 $filenum=@fopen($file_name,"r");
 @flock($filenum,LOCK_SH);
 $file_data=@fread($filenum,filesize($file_name));
 @fclose($filenum);
 return $file_data;
}
function w($file_name,$data,$method="w"){
 $filenum=@fopen($file_name,$method);
 flock($filenum,LOCK_EX);
 $file_data=fwrite($filenum,$data);
 fclose($filenum);
 return $file_data;
}

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读