PHP語言中的require()函數(shù)是一個非常常見的函數(shù),也是相對來說比較基礎(chǔ)的函數(shù)之一。它的作用是引入指定的文件,就和C語言中的#include語句類似。如果require()所引入的文件不存在,則會拋出一個致命錯誤,而include()則只會產(chǎn)生一個警告。
可以通過以下代碼理解require()的作用:
require('example.php');
假設(shè)當(dāng)前PHP文件所在目錄下有一個example.php文件,那么上述代碼就會將該文件引入到當(dāng)前文件中,從而使得example.php中的所有函數(shù)、變量等在當(dāng)前文件中均可訪問。
需要注意的是,require()引入的文件一定要寫相對或絕對路徑名。一般來說,引用文件的相對路徑名應(yīng)該是相對于當(dāng)前文件所在目錄,因此,如果當(dāng)前文件和example.php文件在同一個目錄下,就可以直接使用example.php的文件名。如果在不同目錄下,則需要加上相對路徑或者絕對路徑。
如果例1.php文件位于A目錄下,而example.php文件位于B目錄下,可以參考以下代碼來引入example.php文件:
require('../B/example.php');
這里使用了相對路徑的方式引入了B目錄下的example.php文件,其中..表示上一級目錄
require()還可以在引入結(jié)束之前應(yīng)用一項特殊功能,那就是require()不會引入同一個文件超過一次,無論該文件經(jīng)過require()引入多少次,實際上都只會被引入一次。
例如:
在index.php文件中有以下代碼:
require('example.php');
require('example.php');
而example.php文件下有以下代碼:
$num = 1;
$num ++;
則在index.php文件中執(zhí)行$num這個變量輸出結(jié)果為2,這是因為在require()引入example.php文件的時候?qū)嶋H上已經(jīng)將該文件中的代碼編譯和執(zhí)行了一遍,所以$num這個變量已經(jīng)賦值為1,而require()所引入的是同一個文件,因此第二次引入時,并不會重新編譯和執(zhí)行example.php文件中的代碼。
在實際的開發(fā)過程中,程序員經(jīng)常將常見的配置信息存放在單獨的文件中,例如數(shù)據(jù)庫信息、郵件服務(wù)器信息等等。如果在每一個PHP文件中都需要重新定義這些信息,則工作量將會非常巨大,而且一旦發(fā)生修改,就需要修改所有的文件。因此,這時候使用require()函數(shù)就顯得尤為重要。
舉個例子,我們在config.php文件中定義了一些變量,如下:
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'test';
在其他PHP文件中需要使用這些變量,可以通過require()引入config.php文件,從而實現(xiàn)該文件中的變量在其他文件中的使用。
require('config.php');
這樣,在其他PHP文件中就可以直接使用config.php文件中定義的變量,而無需重新定義:
$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);
總結(jié)一下,require()函數(shù)在PHP中的作用非常重要,能夠大大提高代碼重用率和可維護性。通過引入外部文件,程序員可以將代碼組織和管理得更加靈活、簡便,從而使程序更加健壯和可靠。