include 和 require : 语句包含并运行指定文件
require 和 include 几乎完全一样,除了处理失败的方式不同之外。
require 在出错时产生E_COMPILE_ERROR
级别的错误。换句话说将导致脚本中止;
而 include 只产生警告(E_WARNING
),脚本会继续运行。
看下具体的实例来理解:
目录大概长这样子
// 目录
├── Demo
│ ├── index.php
│ ├── utils
│ │ ├── a.php
│ │ ├── b.php
a.php 的内容
// a.php
<?php
function func_a () {
echo '这是 a.php 里面的 func_a 方法';
}
b.php 的内容:
// b.php
<?php
function func_b () {
echo '这是 b.php 里面的 func_b 方法';
}
index.php 通过 include 和 require 分别来引用 a.php 和 b.php :
<?php
include('utils/a.php');
func_a(); // => 这是 a.php 里面的 func_a 方法
echo '<br />';
require('utils/b.php');
func_b(); // => 这是 b.php 里面的 func_b 方法
正确的引用了文件并执行了文件内的方法:
接下来看下通过引用不存在的文件会有如何反应:
<?php
include('utils/c.php'); // Warning: include(utils/c.php): 吧啦吧啦...
include('utils/b.php');
func_b(); // => 这是 b.php 里面的 func_b 方法
echo '<br />';
require('utils/d.php'); // Fatal error: require(): 吧啦吧啦...
require('utils/a.php'); // 不执行
func_a(); // 不执行
情况就是:
require 在出错时将导致脚本中止;
include 只产生警告,脚本会继续运行。
include_once 和 require_once: 语句在脚本执行期间包含并运行指定文件, 和没有 _once 区别 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含
include_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
<?php
include('utils/a.php');
include_once('utils/a.php');
include_once('utils/a.php');
func_a(); // => 这是 a.php 里面的 func_a 方法
echo '<br />';
require('utils/b.php');
require_once('utils/b.php');
require_once('utils/b.php');
func_b(); // => 这是 b.php 里面的 func_b 方法
include('utils/a.php'); //=> Fatal error ...
require('utils/b.php'); // 不执行
就像代码中一样, *_once 会检查 会检查该文件是否已经被包含过, 而没有 _once 则会抛出警告或者错误
网友评论