本篇文章給大家?guī)砹岁P(guān)于PHP的相關(guān)知識(shí),其中主要介紹了關(guān)于文件包含的相關(guān)問題,包括了文件包含的概念、作用,文件包含的四種形式,以及文件加載原理的相關(guān)內(nèi)容,下面一起來看一下,希望對(duì)大家有幫助。
推薦學(xué)習(xí):《PHP視頻教程》
一、文件包含的概念
在一個(gè)PHP腳本中,去將另外一個(gè)文件(PHP)包含進(jìn)來,去合作完成一件事情。
二、文件包含的作用
- 要么使用被包含文件中的內(nèi)容,實(shí)現(xiàn)代碼的共享(重用):向上包含(索要)向上包含:在當(dāng)前腳本要用某個(gè)代碼之前包含別的文件
- 要么自己有東西可以給別的文件使用,實(shí)現(xiàn)代碼的共享(重用):向下包含(給予)向下包含:在自己有某個(gè)東西的時(shí)候,需要?jiǎng)e的腳本來顯示(自己代碼寫完之后包含其他文件)
最大的作用:分工協(xié)作,每個(gè)腳本做的事情不一樣,因此可以使用協(xié)作方式,讓多個(gè)腳本共同完成一件事情。
三、文件包含的四種形式
- Include:包含文件
- Include_once:系統(tǒng)會(huì)自動(dòng)判斷文件包含過程中,是否已經(jīng)包含過(一個(gè)文件最多被包含一次)
- Require:與include相同
- Require_once:以include_once相同
(一)向上包含——先包含文件,后使用文件中的內(nèi)容
被包含文件代碼
<h3>文件包含——被包含文件</h3> <?php header("Content-type:text/html;charset=gbk"); $a = 2;$b = 4; define("xiaofeng",'cool');
包含文件代碼
<h3>文件包含——包含文件</h3> <?php header("Content-type:text/html;charset=gbk"); include "56.php";//包含文件56.php echo $a,"<hr>",$b,"<hr>",xiaofeng;
(二)向下包含——先準(zhǔn)備內(nèi)容,然后包含另外文件,在另外的文件中,使用當(dāng)前的內(nèi)容。
被包含文件代碼
<h3>文件包含——被包含文件</h3> <?php header("Content-type:text/html;charset=gbk"); echo $a,"<hr>",$b,"<hr>",xiaofeng;//輸出數(shù)據(jù)
包含文件代碼
<h3>文件包含——包含文件</h3> <?php header("Content-type:text/html;charset=gbk"); $a = 2;$b = 4; define("xiaofeng",'cool');//定義數(shù)據(jù) include_once '59.php';//包含數(shù)據(jù)為了顯示以上的內(nèi)容
四、文件加載原理
(一)PHP代碼的執(zhí)行流程
- 讀取代碼文件(PHP程序)
- 編譯:將PHP代碼轉(zhuǎn)換成字節(jié)碼(生成opcode)
- zendengine來解析opcode,按照字節(jié)碼去進(jìn)行邏輯運(yùn)算
- 轉(zhuǎn)換成對(duì)應(yīng)的HTML代碼
(二)文件加載原理
- 在文件加載(include或者require)的時(shí)候,系統(tǒng)會(huì)自動(dòng)的將被包含文件中的代碼相當(dāng)于嵌入到當(dāng)前文件中
- 加載位置:在哪加載,對(duì)應(yīng)的文件中的代碼嵌入的位置就是對(duì)應(yīng)的include位置
- 在PHP中被包含的文件是單獨(dú)進(jìn)行編譯的
注意:PHP文件在編譯的過程中如果出現(xiàn)了語法錯(cuò)誤,那么會(huì)失?。ú粫?huì)執(zhí)行);但是如果被包含文件有錯(cuò)誤的時(shí)候,系統(tǒng)會(huì)在執(zhí)行到包含include這條語句的時(shí)候才會(huì)報(bào)錯(cuò)。
(三)文件加載路徑
文件在加載的時(shí)候需要指定文件路徑才能保證PHP正確的找到對(duì)應(yīng)的文件。
1.絕對(duì)路徑:從磁盤的根目錄開始(本地絕對(duì)路徑)
- Windows:盤符C:/路徑/PHP文件
- Linux:/路徑/PHP文件
- 從網(wǎng)站根目錄開始(網(wǎng)絡(luò)絕對(duì)路徑)
- /:相對(duì)于網(wǎng)站主機(jī)名字對(duì)應(yīng)的路徑
- Localhost/index.php -> E:/server/apache/htdocs/index.php
2.相對(duì)路徑 :從當(dāng)前文件所在目錄開始的路徑
- ./:表示當(dāng)前文件夾
- ../:上級(jí)目錄(當(dāng)前文件夾的上一層文件夾)
3.絕對(duì)路徑和相對(duì)路徑的加載區(qū)別
1、 絕對(duì)路徑相對(duì)效率偏低,但是相對(duì)安全(路徑不會(huì)出問題)
2、 相對(duì)路徑相對(duì)效率高些,但是容易出錯(cuò)(相對(duì)路徑會(huì)發(fā)生改變)
五、文件嵌套包含
一個(gè)文件包含另外一個(gè)文件,同時(shí)被包含的文件又包含了另外一個(gè)文件。嵌套包含的時(shí)候就很容易出現(xiàn)相對(duì)路徑出錯(cuò)的問題:相對(duì)路徑會(huì)因?yàn)槲募陌淖儯?/和../):windows下面,每一個(gè)文件夾下都有.和..的文件夾。
六、Include和require區(qū)別
(一)Include和include_once的區(qū)別:
- Include系統(tǒng)會(huì)碰到一次,執(zhí)行一次;如果對(duì)統(tǒng)一個(gè)文件進(jìn)行多次加載,那么系統(tǒng)會(huì)執(zhí)行多次;
- Include_once:系統(tǒng)碰到多次,也只會(huì)執(zhí)行一次。
(二)Require和include的區(qū)別
本質(zhì)都是包含文件,唯一的區(qū)別在于包含不到文件的時(shí)候,報(bào)錯(cuò)的形式不一樣
- Include的錯(cuò)誤級(jí)別比較輕:不會(huì)阻止代碼執(zhí)行
- Require要求較高:如果包含出錯(cuò)代碼不再執(zhí)行(require后面的代碼)
推薦學(xué)習(xí):《PHP視頻教程》