php include和require的区别深入解析


Posted in PHP onJune 17, 2013

nclude()
The include() 语句包括并运行指定文件。

以下文档也适用于require()。这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的include_path。

当一个文件被包括时,其中所包含的代码继承了include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。

例子12-3. 基本的 include() 例子
vars.php

<?php
$color = 'green';
$fruit = 'apple';
?>

test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>

如果include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。

例子12-4. 函数中的包括

<?php
function foo()
{
global $color;
include 'vars.php';
echo "A $color $fruit";
}
/* vars.php is in the scope of foo() so *
* $fruit is NOT available outside of this *
* scope. $color is because we declared it *
* as global. */
foo(); // A green apple
echo "A $color $fruit"; // A green
?>

当一个文件被包括时,语法解析器在目标文件的开头脱离PHP 模式并进入HTML 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作PHP 代码执行的任何代码都必须被包括在有效的PHP 起始和结束标记之中。

如果“URL fopen wrappers”在PHP 中被激活(默认配置),可以用URL(通过HTTP)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为PHP 代码解释,则可以用适用于HTTP GET 的URL 请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地 脚本则包括了其结果。

警告
Windows 版本的PHP 目前还不支持该函数的远程文件访问,即使allow_url_fopen 选项已被激活。

例子12-5. 通过HTTP 进行的include()

<?php
/* This example assumes that www.example.com is configured to parse .php *
* files and not .txt files. Also, 'Works' here means that the variables *
* $foo and $bar are available within the included file. */
// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';
// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Works.
include 'file.php'; // Works.
?>

相关信息参见使用远程文件,fopen() 和file()。
因为include() 和require() 是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。

例子12-6. include() 与条件语句组

<?php
// This is WRONG and will not work as desired.
if ($condition)
include $file;
else
include $other;
// This is CORRECT.
if ($condition) {
include $file;
} else {
include $other;
}
?>

处理返回值:可以在被包括的文件中使用return() 语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包括的文件中返回值。可以像普通函数一样获得include 呼叫的返回值。

注: 在PHP 3 中,除非是在函数中调用否则被包括的文件中不能出现return。在此情况下return() 作用于该函数而不是整个文件。

例子12-7. include() 和return() 语句
return.php

<?php
$var = 'PHP';
return $var;
?>

noreturn.php
<?php
$var = 'PHP';
?>

testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>

$bar 的值为1 是因为include 成功运行了。注意以上例子中的区别。第一个在被包括的文件中用了return() 而另一个没有。其它几种把文件“包括”到变量的方法是用fopen(),file() 或者include() 连同输出控制函数一起使用。
PHP 相关文章推荐
php中根据变量的类型 选择echo或dump
Jul 05 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
解析php取整的几种方式
Jun 25 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
PHP常量define和const的区别详解
May 18 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
浅析php header 跳转
Jun 17 #PHP
解析php中heredoc的使用方法
Jun 17 #PHP
深入PHP5中的魔术方法详解
Jun 17 #PHP
php.ini 配置文件的深入解析
Jun 17 #PHP
解析posix与perl标准的正则表达式区别
Jun 17 #PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 #PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 #PHP
You might like
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
详解python进行mp3格式判断
2016/12/23 Python
Python线程指南详细介绍
2017/01/05 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python库matplotlib绘制坐标图
2019/10/18 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
班班通项目实施方案
2014/02/25 职场文书
优秀毕业生求职信
2014/06/05 职场文书
社会工作专业自荐信
2014/09/26 职场文书
归元寺导游词
2015/02/06 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis