php include和require的區(qū)別深入解析
更新時(shí)間:2013年06月17日 16:59:45 作者:
本篇文章是對(duì)php中include與require的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
nclude()
The include() 語(yǔ)句包括并運(yùn)行指定文件。
以下文檔也適用于require()。這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個(gè)警告而require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話(huà)說(shuō),如果你想在遇到丟失文件時(shí)停止處理頁(yè)面就用require()。include() 就不是這樣,腳本會(huì)繼續(xù)運(yùn)行。同時(shí)也要確認(rèn)設(shè)置了合適的include_path。
當(dāng)一個(gè)文件被包括時(shí),其中所包含的代碼繼承了include 所在行的變量范圍。從該處開(kāi)始,調(diào)用文件在該行處可用的任何變量在被調(diào)用的文件中也都可用。
例子12-3. 基本的 include() 例子
vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>
如果include 出現(xiàn)于調(diào)用文件中的一個(gè)函數(shù)里,則被調(diào)用的文件中所包含的所有代碼將表現(xiàn)得如同它們是在該函數(shù)內(nèi)部定義的一樣。所以它將遵循該函數(shù)的變量范圍。
例子12-4. 函數(shù)中的包括
<?php
function foo()
{
global $color;
include 'vars.php';
echo "A $color $fruit";
}
/* vars.php is in the scope of foo() so *
* $fruit is NOT available outside of this *
* scope. $color is because we declared it *
* as global. */
foo(); // A green apple
echo "A $color $fruit"; // A green
?>
當(dāng)一個(gè)文件被包括時(shí),語(yǔ)法解析器在目標(biāo)文件的開(kāi)頭脫離PHP 模式并進(jìn)入HTML 模式,到文件結(jié)尾處恢復(fù)。由于此原因,目標(biāo)文件中應(yīng)被當(dāng)作PHP 代碼執(zhí)行的任何代碼都必須被包括在有效的PHP 起始和結(jié)束標(biāo)記之中。
如果“URL fopen wrappers”在PHP 中被激活(默認(rèn)配置),可以用URL(通過(guò)HTTP)而不是本地文件來(lái)指定要被包括的文件。如果目標(biāo)服務(wù)器將目標(biāo)文件作為PHP 代碼解釋?zhuān)瑒t可以用適用于HTTP GET 的URL 請(qǐng)求字符串來(lái)向被包括的文件傳遞變量。嚴(yán)格的說(shuō)這和包括一個(gè)文件并繼承父文件的變量空間并不是一回事;該腳本文件實(shí)際上已經(jīng)在遠(yuǎn)程服務(wù)器上運(yùn)行了,而本地 腳本則包括了其結(jié)果。
警告
Windows 版本的PHP 目前還不支持該函數(shù)的遠(yuǎn)程文件訪(fǎng)問(wèn),即使allow_url_fopen 選項(xiàng)已被激活。
例子12-5. 通過(guò)HTTP 進(jìn)行的include()
<?php
/* This example assumes that www.example.com is configured to parse .php *
* files and not .txt files. Also, 'Works' here means that the variables *
* $foo and $bar are available within the included file. */
// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';
// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Works.
include 'file.php'; // Works.
?>
相關(guān)信息參見(jiàn)使用遠(yuǎn)程文件,fopen() 和file()。
因?yàn)閕nclude() 和require() 是特殊的語(yǔ)言結(jié)構(gòu),在條件語(yǔ)句中使用必須將其放在語(yǔ)句組中(花括號(hào)中)。
例子12-6. include() 與條件語(yǔ)句組
<?php
// This is WRONG and will not work as desired.
if ($condition)
include $file;
else
include $other;
// This is CORRECT.
if ($condition) {
include $file;
} else {
include $other;
}
?>
處理返回值:可以在被包括的文件中使用return() 語(yǔ)句來(lái)終止該文件中程序的執(zhí)行并返回調(diào)用它的腳本。同樣也可以從被包括的文件中返回值??梢韵衿胀ê瘮?shù)一樣獲得include 呼叫的返回值。
注: 在PHP 3 中,除非是在函數(shù)中調(diào)用否則被包括的文件中不能出現(xiàn)return。在此情況下return() 作用于該函數(shù)而不是整個(gè)文件。
例子12-7. include() 和return() 語(yǔ)句
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>
$bar 的值為1 是因?yàn)閕nclude 成功運(yùn)行了。注意以上例子中的區(qū)別。第一個(gè)在被包括的文件中用了return() 而另一個(gè)沒(méi)有。其它幾種把文件“包括”到變量的方法是用fopen(),file() 或者include() 連同輸出控制函數(shù)一起使用。
The include() 語(yǔ)句包括并運(yùn)行指定文件。
以下文檔也適用于require()。這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個(gè)警告而require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話(huà)說(shuō),如果你想在遇到丟失文件時(shí)停止處理頁(yè)面就用require()。include() 就不是這樣,腳本會(huì)繼續(xù)運(yùn)行。同時(shí)也要確認(rèn)設(shè)置了合適的include_path。
當(dāng)一個(gè)文件被包括時(shí),其中所包含的代碼繼承了include 所在行的變量范圍。從該處開(kāi)始,調(diào)用文件在該行處可用的任何變量在被調(diào)用的文件中也都可用。
例子12-3. 基本的 include() 例子
vars.php
復(fù)制代碼 代碼如下:
<?php
$color = 'green';
$fruit = 'apple';
?>
test.php
復(fù)制代碼 代碼如下:
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>
如果include 出現(xiàn)于調(diào)用文件中的一個(gè)函數(shù)里,則被調(diào)用的文件中所包含的所有代碼將表現(xiàn)得如同它們是在該函數(shù)內(nèi)部定義的一樣。所以它將遵循該函數(shù)的變量范圍。
例子12-4. 函數(shù)中的包括
復(fù)制代碼 代碼如下:
<?php
function foo()
{
global $color;
include 'vars.php';
echo "A $color $fruit";
}
/* vars.php is in the scope of foo() so *
* $fruit is NOT available outside of this *
* scope. $color is because we declared it *
* as global. */
foo(); // A green apple
echo "A $color $fruit"; // A green
?>
當(dāng)一個(gè)文件被包括時(shí),語(yǔ)法解析器在目標(biāo)文件的開(kāi)頭脫離PHP 模式并進(jìn)入HTML 模式,到文件結(jié)尾處恢復(fù)。由于此原因,目標(biāo)文件中應(yīng)被當(dāng)作PHP 代碼執(zhí)行的任何代碼都必須被包括在有效的PHP 起始和結(jié)束標(biāo)記之中。
如果“URL fopen wrappers”在PHP 中被激活(默認(rèn)配置),可以用URL(通過(guò)HTTP)而不是本地文件來(lái)指定要被包括的文件。如果目標(biāo)服務(wù)器將目標(biāo)文件作為PHP 代碼解釋?zhuān)瑒t可以用適用于HTTP GET 的URL 請(qǐng)求字符串來(lái)向被包括的文件傳遞變量。嚴(yán)格的說(shuō)這和包括一個(gè)文件并繼承父文件的變量空間并不是一回事;該腳本文件實(shí)際上已經(jīng)在遠(yuǎn)程服務(wù)器上運(yùn)行了,而本地 腳本則包括了其結(jié)果。
警告
Windows 版本的PHP 目前還不支持該函數(shù)的遠(yuǎn)程文件訪(fǎng)問(wèn),即使allow_url_fopen 選項(xiàng)已被激活。
例子12-5. 通過(guò)HTTP 進(jìn)行的include()
復(fù)制代碼 代碼如下:
<?php
/* This example assumes that www.example.com is configured to parse .php *
* files and not .txt files. Also, 'Works' here means that the variables *
* $foo and $bar are available within the included file. */
// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';
// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Works.
include 'file.php'; // Works.
?>
相關(guān)信息參見(jiàn)使用遠(yuǎn)程文件,fopen() 和file()。
因?yàn)閕nclude() 和require() 是特殊的語(yǔ)言結(jié)構(gòu),在條件語(yǔ)句中使用必須將其放在語(yǔ)句組中(花括號(hào)中)。
例子12-6. include() 與條件語(yǔ)句組
復(fù)制代碼 代碼如下:
<?php
// This is WRONG and will not work as desired.
if ($condition)
include $file;
else
include $other;
// This is CORRECT.
if ($condition) {
include $file;
} else {
include $other;
}
?>
處理返回值:可以在被包括的文件中使用return() 語(yǔ)句來(lái)終止該文件中程序的執(zhí)行并返回調(diào)用它的腳本。同樣也可以從被包括的文件中返回值??梢韵衿胀ê瘮?shù)一樣獲得include 呼叫的返回值。
注: 在PHP 3 中,除非是在函數(shù)中調(diào)用否則被包括的文件中不能出現(xiàn)return。在此情況下return() 作用于該函數(shù)而不是整個(gè)文件。
例子12-7. include() 和return() 語(yǔ)句
return.php
復(fù)制代碼 代碼如下:
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
復(fù)制代碼 代碼如下:
<?php
$var = 'PHP';
?>
testreturns.php
復(fù)制代碼 代碼如下:
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>
$bar 的值為1 是因?yàn)閕nclude 成功運(yùn)行了。注意以上例子中的區(qū)別。第一個(gè)在被包括的文件中用了return() 而另一個(gè)沒(méi)有。其它幾種把文件“包括”到變量的方法是用fopen(),file() 或者include() 連同輸出控制函數(shù)一起使用。
您可能感興趣的文章:
- PHP中include和require的區(qū)別實(shí)例分析
- php使用include 和require引入文件的區(qū)別
- PHP中include()與require()的區(qū)別說(shuō)明
- PHP中include/require/include_once/require_once使用心得
- 簡(jiǎn)單談?wù)凱HP中的include、include_once、require以及require_once語(yǔ)句
- PHP中require和include路徑問(wèn)題詳解
- PHP包含文件函數(shù)include、include_once、require、require_once區(qū)別總結(jié)
- PHP中include與require使用方法區(qū)別詳解
- PHP中include()與require()的區(qū)別說(shuō)明
- PHP中include和require的使用詳解
相關(guān)文章
php的POSIX 函數(shù)以及進(jìn)程測(cè)試的深入分析
本篇文章是對(duì)php的POSIX函數(shù)以及進(jìn)程測(cè)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP計(jì)劃任務(wù)、定時(shí)執(zhí)行任務(wù)的實(shí)現(xiàn)代碼
PHP計(jì)劃任務(wù)、定時(shí)執(zhí)行任務(wù)的實(shí)現(xiàn)用到的函數(shù) ignore_user_abort(),set_time_limit(0),sleep($interval) 此代碼只要運(yùn)行一次后關(guān)閉瀏覽器即可。2011-04-04PHP函數(shù)rtrim()使用中的怪異現(xiàn)象分析
這篇文章主要介紹了PHP函數(shù)rtrim()使用中的怪異現(xiàn)象,結(jié)合具體實(shí)例形式分析了php函數(shù)rtrim在進(jìn)行字符匹配過(guò)程中出現(xiàn)的問(wèn)題與解決方法,有助于進(jìn)一步了解rtrim函數(shù)的原理與使用技巧,需要的朋友可以參考下2017-02-02php獲取開(kāi)始與結(jié)束日期之間所有日期的方法
這篇文章主要介紹了php獲取開(kāi)始與結(jié)束日期之間所有日期的方法,涉及php針對(duì)日期與時(shí)間的相關(guān)運(yùn)算技巧,需要的朋友可以參考下2016-11-11PHP GD庫(kù)生成圖像的幾個(gè)函數(shù)總結(jié)
這篇文章主要介紹了PHP GD庫(kù)生成圖像的幾個(gè)函數(shù)總結(jié),即imagegif、imagejpeg、imagepng、imagewbmp幾個(gè)生成圖片的函數(shù),需要的朋友可以參考下2014-11-11PHP 存儲(chǔ)文本換行實(shí)現(xiàn)方法
在文本存儲(chǔ)時(shí)使用\n如果發(fā)現(xiàn)沒(méi)有效果, 這時(shí)可以使用\r\n就可以了,希望對(duì)有需要的朋友有所幫助。2010-01-01總結(jié)一些PHP中好用但又容易忽略的小知識(shí)
這篇文章主要給大家總結(jié)了一些在日常工作發(fā)現(xiàn)的,PHP中好用但又容易被人們忽略的小知識(shí),例如PHP函數(shù)之判斷函數(shù)是否存在、PHP函數(shù)之可變函數(shù)等等,需要的朋友們下面跟著小編來(lái)一起看看詳細(xì)的介紹吧。2017-06-06Thinkphp3.2.3整合phpqrcode生成帶logo的二維碼
這篇文章主要為大家詳細(xì)介紹了Thinkphp3.2.3整合phpqrcode生成帶logo的二維碼的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-07-07