注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

永福的技术博客

Linux运维

 
 
 

日志

 
 

【php笔试】简述include, require, include_once, require_once这几个函数的区别?  

2011-08-09 17:11:13|  分类: 软件编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.require()和include()
     相同点:
     a. require()和include()语句都用于以指定的文件代替该语句。
     b. 在php配置文件php.ini中的URL fopen wrappers下有 allow_url_include 是打开的,就可以使用URL来指定文件的位置从而实现远程文件的调用。
     c. 在被包含的文件中,处理器是按照html模式来解释其中的内容的,处理完被包含的内容后又恢复到php模式。所以被包含的文件需要使用正确的php语法。
     d. require()和include()只是php中的一种语言特性,而不是函数。
     
     不同点:
     a. require()所包含的文件中不能包含控制结构,而且不能使用return这样的语句。在require()所包含的文件中使用return语句会产生处理错误。
     b. require()语句会无条件读取它所包含的文件的内容,不管是否会执行。require()语句在PHP程序执行前就会将使用require引用的文件读入,因此require通常放到程序的开始处。
     c. include()会根据条件需要来包含所需要的文件。
     d. 当require()所包含的文件不存在或其他错误时,会产生一个严重级别的错误,将不会执行后面的代码。
     e. 当include()所包含的文件不存在或其他错误时,会产生一个warning级别的错误,将继续执行后面的代码。
     f. require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。 

     实例:
    a.如果require()语句通过声明文件的URL来包含远程文件,而且远程服务器按照php代码来解释该文件的话,本地php文件中所包含的内容是在远程服务器上处理以后的结果。例如: 
/* 
这个例子假设some_server服务器可以解释.php文件,而不对.txt文件进行解释。在远程文件中需要变量$varfirst和$varsecond 
*/ 
/*不能正确执行,远程服务器不处理.txt文件*/ 
require("http://some_server/file.txt?varfirst=1&varsecond=2"); 

/*不正确,这样只能在本地机上寻找file.php文件*/ 
require("file.php?varfirst=1&varsecond=2"); 

/*正确的语句*/ 
require("http://some_server/file.php?varfirst=1&varsecond=2"); 

$varfirst=1; 
$varsecond=2; 
require("file.txt"); /*正确的语句*/ 
require("file.php"); /*正确的语句*/ 
     b.假设被包含的文件为test.inc和主文件main.php位于一个目录中。test.inc的内容如下: 
<?php 
     echo "Before the return<br>\n"; 
if(1) 
     return 27; 
echo "After the return<br>\n"; 
?> 
     假设在main.php文件中包含下面的语句: 
<?php 
     $retval=include('test.inc'); 
     echo "File returned:'$retval'<br>\n"; 
?> 
     php3.0解释器会在第二行报告错误,而不能得到include()语句的返回值。但在php4.0中会得到下面的结果: 
Before the return 
File returned: '27' 
     下边假设main.php改为: 
<?php 
     include('test.inc'); 
     echo "Back in main.html<br>\n"; 
?> 
     在php4.0中的输出结果是: 
Before the return 
Back in main.html 
     在php5.0中的输出结果也是: 
Before the return 
Back in main.html 
     在php3.0中的输出结果是: 
Before the return 
27Back in main.html 
          Parse error:parse error in /apache/htdocs/phptest/main.html on line 5 
     出现上面的错误是因为return语句位于{}内部而且不是一个函数内部。如果把{}去掉,使它位于test.inc的最外层,输出结果是: 
Before the return 
27Back in main.html 
     之所以出现27,是因为在php3.0中不支持include()返回。 

2.require_once()和include_once()语句
     require_once()和include_once()语句分别对应于require()和include()语句。require_once()和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。
     include_once()语句的语法和include()语句类似,主要区别也是避免多次包含一个文件而引起函数或变量的重复定义。
     require_once语句有一个引用链,它可以保证文件加入你的程序仅仅只有一次,而且会避开变量值和函数名之间的冲突。
     如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。 

  评论这张
 
阅读(373)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017