## 包含語句
### 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防御