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 相关文章推荐
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
PHPEXCEL 使用小记
Jan 06 PHP
基于php 随机数的深入理解
Jun 05 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP微信H5支付开发实例
Jul 25 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
可输入的下拉框
2006/06/19 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
详解JS函数防抖
2020/06/05 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python文件比较示例分享
2014/01/10 Python
Python读大数据txt
2016/03/28 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
Django websocket原理及功能实现代码
2020/11/14 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
运动会通讯稿150字
2014/02/15 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
员工给公司的建议书
2019/06/24 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
redis内存空间效率问题的深入探究
2021/05/17 Redis
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP