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