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实现文件安全下载
Oct 09 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
php中stdClass的用法分析
Feb 27 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 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的PSR规范中文版
2013/09/28 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
jquery multiSelect 多选下拉框
2010/07/09 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现中一次读取多个值的方法
2018/04/22 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
Python类成员继承重写的实现
2020/09/16 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
局域网定义和特性
2016/01/23 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
中班幼儿评语大全
2014/04/30 职场文书
理发店策划方案
2014/06/05 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers