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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
PHP实现图片简单上传
Oct 09 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
详解PHP队列的实现
Mar 14 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
使用Modello编写JavaScript类
2006/12/22 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
会计自我鉴定范文
2013/10/06 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
如何用python绘制雷达图
2021/04/24 Python