一院究、簡介
include和require都是引入指定的文件康愤。_once表示只引入一次半开,即之前已經(jīng)引入過的不再引入鉴未。
引用原理:
被包含文件先按參數(shù)給出的路徑尋找枢冤,如果沒有給出目錄(只有文件名)時(shí)則按照 include_path 指定的目錄尋找。如果在 include_path 下沒找到該文件則 include 最后才在調(diào)用腳本文件所在的目錄和當(dāng)前工作目錄下尋找铜秆。如果最后仍未找到文件則 include 結(jié)構(gòu)會(huì)發(fā)出一條警告淹真;這一點(diǎn)和 require 不同,后者會(huì)發(fā)出一個(gè)致命錯(cuò)誤连茧。
如果定義了路徑——不管是絕對(duì)路徑(在 Windows 下以盤符或者 \ 開頭核蘸,在 Unix/Linux 下以 / 開頭)還是當(dāng)前目錄的相對(duì)路徑(以 . 或者 .. 開頭)——include_path 都會(huì)被完全忽略。例如一個(gè)文件以 ../ 開頭啸驯,則解析器會(huì)在當(dāng)前目錄的父目錄下尋找該文件客扎。
二、區(qū)別
1罚斗、加載失敗的處理方式不同
include在引入不存文件時(shí)產(chǎn)生一個(gè)警告(E_WARNING級(jí)別)且腳本還會(huì)繼續(xù)執(zhí)行徙鱼;require則會(huì)導(dǎo)致一個(gè)致命性錯(cuò)誤(E_COMPILE_ERROR級(jí)別)且腳本停止執(zhí)行。
include 'hello.php';
echo 'world'; // 如果hello.php不存在针姿,echo 'world'這句是可以繼續(xù)執(zhí)行的袱吆。
require 'hello.php';
echo 'world'; //如果hello.php不存在,echo 'hello'這句是不會(huì)執(zhí)行的搓幌,到require時(shí)就停止了杆故。
2、include()是有條件包含函數(shù)溉愁,而 require()則是無條件包含函數(shù)处铛。
if(FALSE){
include 'file.php'; //file.php不會(huì)被引入
}
if(FALSE){
require 'file.php'; //file.php將會(huì)被引入
}
3饲趋、include有返回值,而require沒有
在失敗時(shí) include 返回 FALSE 并且發(fā)出警告撤蟆。成功的包含則返回 1奕塑,除非在包含文件中另外給出了返回值。
4家肯、文件引用方式
include()執(zhí)行時(shí)需要引用的文件每次都要進(jìn)行讀取和評(píng)估龄砰;
require()執(zhí)行時(shí)需要引用的文件只處理一次(實(shí)際上執(zhí)行時(shí)需要引用的文件內(nèi)容替換了require()語句)
require通常放在 PHP 程序的最前面,PHP 程序在執(zhí)行前讨衣,就會(huì)先讀入 require 所指定引入的文件换棚,使它變成 PHP 程序網(wǎng)頁的一部份。常用的函數(shù)反镇,亦可以這個(gè)方法將它引入網(wǎng)頁中固蚤。
include一般是放在流程控制的處理部分中。PHP 程序網(wǎng)頁在讀到 include 的文件時(shí)歹茶,才將它讀進(jìn)來夕玩。這種方式,可以把程序執(zhí)行時(shí)的流程簡單化惊豺。
三燎孟、注意
1、關(guān)于include和require后面是否加括號(hào)的問題
理論上來說:include和require后面加不加括號(hào)對(duì)執(zhí)行結(jié)果沒有區(qū)別尸昧,但是加上括號(hào)效率較低揩页,所以后面能不加括號(hào)就不加括號(hào)。
2彻磁、關(guān)于_once
require(include) / require_once(include_once)唯一的區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過碍沐,如果是則不會(huì)再次包含。
參考
1衷蜓、require:http://php.net/manual/zh/function.require.php
2累提、include:http://php.net/manual/zh/function.include.php
3、require_once:http://php.net/manual/zh/function.require-once.php
4磁浇、include_once:http://php.net/manual/zh/function.include-once.php