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代码
Dec 06 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php 伪静态之IIS篇
Jun 02 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
PHP Reflection API详解
May 12 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
PHP命名空间与自动加载类详解
Sep 04 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
JS实现购物车特效
2017/02/02 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python实现识别相似图片小结
2016/02/22 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python time.strptime格式化实例详解
2021/02/03 Python
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
电子信息工程自荐信
2014/05/26 职场文书
先进基层党组织材料
2014/12/25 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang