PHP開(kāi)發(fā)基礎(chǔ)教程之文件包含
一、文件包含概述
在實(shí)際開(kāi)發(fā)中,常常需要把程序中的公用代碼放到一個(gè)文件中,使用這些代碼的文件只需要包含這個(gè)文件即可。這種方法有助于提高代碼的重用性,給代碼的編寫(xiě)與維護(hù)帶來(lái)很大的便利。在PHP中, 有require、require_once、include、include- once四種方法包含一個(gè)文件。
我們來(lái)對(duì)比他們的不同:
注:
1,少用_once帶once,因?yàn)樗鼤?huì)消耗更多的資源去做檢測(cè)的工作。
二、四種方法功能介紹
注:建議同學(xué)們將代碼復(fù)制到本地進(jìn)行測(cè)試
創(chuàng)建一個(gè)1.php文件,里面寫(xiě)上兩個(gè)函數(shù):
<?php //functions.php文件 function demo(){ echo 'aaaa'; } function test(){ echo 'cccdddd'; } ?>
在上述php文件的同級(jí)目錄下,我再創(chuàng)建一個(gè)2.php文件把1.php文件包含進(jìn)來(lái)。這樣我的函數(shù)就可以專(zhuān)門(mén)放在1.php里面,哪兒需要用到這些函數(shù)的時(shí)候,我就從哪兒包含進(jìn)來(lái):
<?php include '1.php'; //可以直接調(diào)用 demo(); test(); ?>
我通過(guò)過(guò)上例我們知道了include的功能。接下來(lái)我們對(duì)比include和require:
代碼中,我們先用include 來(lái)包含不存在的test.php文件,
<?php include '1.php'; include 'test.php'; //可以直接調(diào)用 demo(); test(); ?>
在本地的輸出結(jié)果:
再用require包含 不存在的test.php文件:
通過(guò)上例的對(duì)比我們發(fā)現(xiàn):
如果test.php文件不存在include 會(huì)發(fā)出警告繼續(xù)執(zhí)行demo()和test()函數(shù)。
而requre則直接報(bào)錯(cuò),demo()和test()函數(shù)無(wú)法繼續(xù)執(zhí)行。
我們通過(guò)表格知道了:inlcude 和include_once的區(qū)別在于,檢測(cè)是否重復(fù)包含。如果重復(fù)包含了include_once不會(huì)再包含 對(duì)應(yīng)的文件了,而include 則不管這些。有沒(méi)引入過(guò)文件,都再引入一次。
同樣剛剛的2.php我們?cè)賹?shí)驗(yàn)一下,我們將functions.php包含兩次,分別使用include和include_once:
<?php include '1.php'; include '1.php'; //可以直接調(diào)用 demo(); test(); ?>
結(jié)果:
改為include_once再試一次:
<?php include_once '1.php'; include_once '1.php'; //可以直接調(diào)用 demo(); test(); ?>
輸出:
上圖中的提示是說(shuō),不能重新定義函數(shù)demo()。
我們?cè)诤瘮?shù)定義章節(jié)講過(guò),函數(shù)不能定義兩次,否則會(huì)報(bào)錯(cuò)。因?yàn)槲覀儗?3_1.php包含了兩次所以執(zhí)行了兩次,因此報(bào)這個(gè)錯(cuò)誤。
而include_once不報(bào)錯(cuò)的原因是因?yàn)椋核麢z測(cè)了functions.php曾經(jīng)包含過(guò),不再進(jìn)行包含引入了。
而require和require_once的功能,大家用你最最聰明的小腦袋是不是就能推理出來(lái)了呢?require_once有兩個(gè)特點(diǎn):
1.包含 的文件必須存在,否則停止執(zhí)行
2.會(huì)做重復(fù)包含檢查喲
學(xué)習(xí)新得:
Include與require的區(qū)別,include遇到錯(cuò)誤警告,但是繼續(xù)執(zhí)行。Require遇到錯(cuò)誤之后報(bào)警,不會(huì)再向下執(zhí)行
inlcude 和include_once的區(qū)別在于,檢測(cè)是否重復(fù)包含。如果重復(fù)包含了include_once不會(huì)再包含 對(duì)應(yīng)的文件了,而include 則不管這些。