## 包含语句
### include
`include` 语句包含并运行指定文件。
文件查找顺序:
* 被包含文件先按参数给出的路径寻找。
* 如果没有给出目录(只有文件名)时则按照 `include_path` 指定的目录寻找。
* 如果在 `include_path` 下没找到该文件,在调用脚本文件所在的目录和当前工作目录下寻找。
如果最后仍未找到文件则会发出一条警告(E_WARNING), 脚本继续执行。
当一个文件被包含时,其中所包含的代码继承了 `include` 所在行的变量范围。
从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。
不过所有在包含文件中定义的函数和类都具有全局作用域。
```
vars.php
<?php
$color = 'green';
$fruit = 'apple';
echo "I am vars.php" . PHP_EOL;
?>
test.php
<?php
echo "A {$color} {$fruit}" . PHP_EOL; // A
include 'vars.php';
include 'vars.php'; // include again
echo "A {$color} {$fruit}" . PHP_EOL; // A green apple
?>
```
如果 `include` 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。
```
<?php
function foo()
{
global $color;
include 'vars.php';
echo "A {$color} {$fruit}" . PHP_EOL;
}
foo(); // A green apple
echo "A {$color} {$fruit}" . PHP_EOL; // A green
?>
```
`include` 结合 `return` 语句
```
db.php
<?php
$db = array(
'host' => 'localhost',
'user' => 'root',
'password' => '123456',
'port' => 3306,
'dbname' => 'test',
);
return $db;
?>
test.php
<?php
$db = include 'db.php';
var_dump($db);
?>
```
### include_once
此行为和 `include` 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。
```
vars.php
<?php
$color = 'green';
$fruit = 'apple';
echo "I am vars.php" . PHP_EOL;
?>
test.php
<?php
include_once 'vars.php';
include_once 'vars.php'; // include again
echo "A {$color} {$fruit}" . PHP_EOL; // A green apple
?>
```
### require
文件的查找方式和 `include` 一样,如果没有找到包含文件,则会发出致命错误(E_COMPILE_ERROR),脚本停止执行。
### require_once
此行为和 `require` 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。
- 基本语法
- PHP标记
- 指令分隔符
- 从HTML中分离
- 注释
- 数据类型
- 布尔值
- 整数
- 浮点数
- 字符串
- 数组
- 对象
- 资源
- 空值
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 常量
- 常量语法
- 魔术常量
- 运算符
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 递增与递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if条件结构
- switch条件结构
- while循环结构
- do-while循环结构
- for循环结构
- foreach循环结构
- 包含文件
- 函数
- 自定义函数
- 可变函数
- 匿名函数
- 递归函数
- 类与对象
- 基本概念
- 属性
- 方法
- 类常量
- 构造函数和析构函数
- 访问控制
- 继承
- 抽象类
- 接口
- Trait
- 重载
- 对象遍历
- 魔术方法
- Final关键字
- 命名空间
- 自动加载
- 错误处理
- 错误显示
- 错误日志
- 错误报告
- 自定义错误处理
- 异常处理
- 异常处理机制
- 扩展异常处理类
- 字符操作
- 数组操作
- 时间操作
- 表单操作
- GET提交
- POST提交
- 文件上传
- 会话控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件属性
- 读取文件
- 写入文件
- 文件管理
- 文件锁
- 目录处理
- 路径处理
- 网络操作
- HTTP协议
- Socket操作
- CURL操作
- PDO操作
- 介绍
- 连接管理
- 预处理语句
- 事务处理
- 错误处理
- 图像操作
- 正则表达式
- 标准推荐
- 包管理器
- 设计模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御