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模板技术原理【一】
Jan 10 PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
解析php入库和出库
Jun 25 PHP
php检测文件编码的方法示例
Apr 25 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP stream_context_create()函数的使用示例
May 12 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python主要用于哪些方向
2020/07/05 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python自动登录QQ的实现示例
2020/08/28 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
小学教师国培感言
2014/02/08 职场文书
幼儿园家长评语
2014/02/10 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
繁星春水读书笔记
2015/06/30 职场文书
教师网络培训心得体会
2016/01/09 职场文书