本文转自:http://hi.baidu.com/ckcljj/blog/item/9518e103c1cec17f3912bbb1.html
今日看php文档,看到include和require区别的讲解,感觉这对于初学者是一个很容易迷惑的地方,在此记录下来,以便自己查阅,也希望对各位php朋友有所帮助。
引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。
require 的使用方法如 require("MyRequireFile.php");
。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include("MyIncludeFile.php");
。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
include() 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() 是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。 [Page] 例子 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() 连同输出控制函数一起使用。