php 檔案包含函數(shù)
在實(shí)際開發(fā)中,常常需要把程式中的公用程式碼放到一個(gè)檔案中,使用這些程式碼的檔案只需要包含這個(gè)檔案。這種方法有助於提高程式碼的重用性,為程式碼的編寫與維護(hù)帶來很大的便利。在PHP中,有require、require_once、include、include- once四種方法包含一個(gè)檔案。
我們來比較他們的不同:
#包含失敗 | #特點(diǎn) | |
---|---|---|
Inlcude | 傳回一條警告 | 檔案繼續(xù)向下執(zhí)行。通常用於動(dòng)態(tài)包含 |
Require | 一個(gè)致命的錯(cuò)誤 | 程式碼就不會(huì)繼續(xù)向下執(zhí)行。通常包含極為重要的文件,整個(gè)程式碼甭想執(zhí)行 |
Include_once | 返回一條警告 | 除了原有include的功能以外,它還會(huì)做once檢測(cè),如果檔案曾經(jīng)已經(jīng)被包含過,不再包含 |
Require_once | 一個(gè)致命的錯(cuò) | 除了原始的功能一外,會(huì)做一次once偵測(cè),防止檔案重複被包含 |
注意:
1,少用_once帶once,因?yàn)樗鼤?huì)消耗更多的資源去做檢測(cè)的工作。
2,特高級(jí)
Include檔案只需要編譯一次,因?yàn)槊看伟琲nclude都會(huì)再執(zhí)行一次對(duì)應(yīng)的程式碼,如何減少include再次執(zhí)行時(shí),需要重新解析的過程。
我們來做一幾個(gè)實(shí)驗(yàn):
1,include包含函數(shù)的函數(shù)。
建立一個(gè)functions.php文件,裡面寫上兩個(gè)函數(shù):
<?php //functions.php文件 function demo(){ echo 'aaaa'; } function test(){ echo 'cccdddd'; } ?>
在functions.php的同級(jí)目錄下,我再建立一個(gè)user.php檔案把functions.php文件包含進(jìn)來。這樣我的函數(shù)就可以專門放在functions.php裡面,哪裡需要用到這些函數(shù)的時(shí)候,我就從哪裡包含進(jìn)來:
<?php //user.php include 'functions.php'; //可以直接調(diào)用 demo(); test(); ?>
我透過過上例我們知道了include的功能。接下來我們比較include和require:
程式碼中,我們先用include 來包含不存在的test.php文件,
<?php //user.php include 'functions.php'; include 'test.php'; //可以直接調(diào)用 demo(); test(); ?>
再用require包含不存在的test.php檔案:
<?php //user.php include 'functions.php'; require 'test.php'; //可以直接調(diào)用 demo(); test(); ?>
透過上例的比較我們發(fā)現(xiàn):
如果test.php檔案不存在include 會(huì)發(fā)出警告繼續(xù)執(zhí)行demo()和test()函數(shù)。
而requre則直接報(bào)錯(cuò),demo()和test()函數(shù)無法繼續(xù)執(zhí)行。
我們透過表格知道了:inlcude 和include_once的差別在於,偵測(cè)是否重複包含。如果重複包含了include_once不會(huì)再包含 對(duì)應(yīng)的檔案了,而include 則不管這些。有沒引進(jìn)過文件,都再引進(jìn)一次。
同樣剛剛的user.php我們?cè)賹?shí)驗(yàn)一下,我們將functions.php包含兩次,分別使用include和include_once:
<?php //user.php //這兒被包含了兩次同樣的函數(shù)定義文件喲 include 'functions.php'; include 'functions.php'; //可以直接調(diào)用 demo(); test(); ?>
改為include_once再試一次:
<?php
<?php //user.php //這兒被包含了兩次同樣的函數(shù)定義文件喲 include_once 'functions.php'; include_once 'functions.php'; //可以直接調(diào)用 demo(); test(); ?>
大家分別執(zhí)行後會(huì)發(fā)現(xiàn)-include 這次引入functions.php兩次的時(shí)候報(bào)瞭如下錯(cuò)誤:
上圖中的提示是說,不能重新定義函數(shù)demo()。
我們?cè)诤瘮?shù)定義章節(jié)講過,函數(shù)不能定義兩次,否則會(huì)報(bào)錯(cuò)。因?yàn)槲覀儗?functions.php包含了兩次所以執(zhí)行了兩次,因此報(bào)這個(gè)錯(cuò)誤。
而include_once不報(bào)錯(cuò)的原因是因?yàn)椋核麄蓽y(cè)了functions.php曾經(jīng)包含過,不再進(jìn)行包含引入了。
而require和require_once的功能,大家用你最聰明的小腦袋是不是就能推理出來了呢? require_once有兩個(gè)特點(diǎn):
????1.包含 的檔案必須存在,否則停止執(zhí)行
????2.會(huì)做重複包含檢查喲