我把這兩個(gè)語句放在一起介紹,讀者可以比較學(xué)習(xí)。 1.require()語句 require()語句用于指定的文件代替語句本身,就象 " /> 国产三级在线,99精品一级欧美片免费播放,国产一区二区av

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

require(),include(),require_once()和include_once()的異同

require()和include()有許多相似之處,也有些不同。理解它們的不同點(diǎn)非常重要,否則很容易犯錯(cuò)誤。 

我把這兩個(gè)語句放在一起介紹,讀者可以比較學(xué)習(xí)。 
1.require()語句 
  require()語句用于指定的文件代替語句本身,就象C語言中的include()語句一樣。如果php配置文件php.ini中的URL fopen wrappers 是打開的(默認(rèn)情況下是打開的),就可以使用URL來指定文件的位置從而實(shí)現(xiàn)遠(yuǎn)程文件的調(diào)用。 
  有一點(diǎn)就是使用require()和include()語句時(shí)要特別的注意。那就是在被包含的文件中,處理器是按照html模式來解釋其中的內(nèi)容的,處理完被包含的內(nèi)容后又恢復(fù)到php模式。所以如果需要在被包含文件中使用php語法,就要使用正確的php開始和結(jié)束標(biāo)記來把這些語句包含進(jìn)去。 
  require()和include()知識(shí)php中的一種語言特性,而不是函數(shù)。它們和函數(shù)有許多不同的地方。 
比如:require()所包含的文件中不能包含控制結(jié)構(gòu),而且不能使用return這樣的語句。在require()所包含的文件中使用return語句會(huì)產(chǎn)生處理錯(cuò)誤。 
  不象include()語句,require()語句會(huì)無條件地讀取它所包含的文件的內(nèi)容,而不管這些語句是否執(zhí)行。所以如果你想按照不同的條件包含不同的文件,就必須使用include()語句。當(dāng)然,如果require()所在位置的語句不被執(zhí)行,require()所包含的文件中的語句也不會(huì)被執(zhí)行。 
  require()不能在循環(huán)體中根據(jù)條件的不同而包含不同的文件。require()語句只會(huì)在第一次執(zhí)行時(shí)調(diào)用它所包含的文件中的內(nèi)容替換本身這條語句,當(dāng)再次被執(zhí)行時(shí)只能執(zhí)行第一次所包含的語句。但是include()語句可以在循環(huán)體中來包含不同的文件。 
  require()語句中的變量繼承require()語句所在位置的變量作用域。所有在require()語句的位置可以訪問的變量,在require()語句所包含的文件中都可以訪問。如果require()語句位于一個(gè)函數(shù)內(nèi)部,那么被包含文件內(nèi)的語句都相當(dāng)于定義在函數(shù)內(nèi)部。 
  require()語句在php程序執(zhí)行前就會(huì)將使用require引用的文件讀入,因此require通常放到程序的開始處。因此要特別注意一點(diǎn),require語句有一點(diǎn)強(qiáng),不管程序是否真的需要引用的文件,只要你使用require語句,它都會(huì)把他們包含進(jìn)來!即使你是在條件控制語句中使用這個(gè)函數(shù)進(jìn)行包含,那怕是那個(gè)條件不為真,引用文件也會(huì)被包含進(jìn)來!形成了僵尸,在運(yùn)行過程中這些僵尸是不起任何可見作用的,但是很明顯它會(huì)加重負(fù)擔(dān),所以這一點(diǎn)要特別注意!如果使用require語句發(fā)生了包含錯(cuò)誤,那么程序?qū)⑤敵龀鲥e(cuò)信息并停止運(yùn)行!! 

  如果require()語句通過聲明文件的URL來包含遠(yuǎn)程文件,而且遠(yuǎn)程服務(wù)器按照php代碼來解釋該文件的話,本地php文件中所包含的內(nèi)容是在遠(yuǎn)程服務(wù)器上處理以后的結(jié)果。例如: 
  /* 
    這個(gè)例子假設(shè)some_server服務(wù)器可以解釋.php文件,而不對(duì).txt文件進(jìn)行解釋。在遠(yuǎn)程文件中   
  需要變量$varfirst和$varsecond 
  */ 
  /*不能正確執(zhí)行,遠(yuǎn)程服務(wù)器不處理.txt文件*/ 
  require("http://some_server/file.txt?varfirst=1&varsecond=2"); 

  /*不正確,這樣只能在本地機(jī)上尋找file.php文件*/ 
  require("file.php?varfirst=1&varsecond=2"); 

  /*正確的語句*/ 
  require("http://some_server/file.php?varfirst=1&varsecond=2"); 

  $varfirst=1; 
  $varsecond=2; 
  require("file.txt"); /*正確的語句*/ 
  require("file.php"); /*正確的語句*/ 
  本來在php3.0中,require()所包含的文件可以使用return語句,但條件是return語句不能出現(xiàn)在{}內(nèi)部,而必須出現(xiàn)在被包含文件的全局范圍內(nèi)。在php4.0中已經(jīng)取消了require()的這個(gè)功能,但是仍然可以使用include()來實(shí)現(xiàn)。 

2.include()語句 
  include()語句和require()語句有許多相同的地方。凡是在上邊require()語句中沒有明確說明不能適用于include()的部分外,require()語句的功能完全適用于include()語句。下邊介紹require()語句所沒有的include()語句的功能和特點(diǎn)。 
  include語句只有在被執(zhí)行時(shí)才會(huì)讀入要包含的文件。在錯(cuò)誤處理方便,使用include語句,如果發(fā)生包含錯(cuò)誤,程序?qū)⑻^include語句,雖然會(huì)顯示錯(cuò)誤信息但是程序還是會(huì)繼續(xù)執(zhí)行! 
    php處理器會(huì)在每次遇到include()語句時(shí),對(duì)它進(jìn)行重新處理,所以可以根據(jù)不同情況的,在條件控制語句和循環(huán)語句中使用include()來包含不同的文件。 
    例如: 
  <?php 
    $files=array('first.php','second.php','third.php'); 
    for($i=0;$i<count($files);$i++) 
    { 
        include $files[$i]; 
    } 
  ?> 
    在php3.0和php4.0中include()語句所包含的文件中都可以使用return語句來返回一個(gè)值,并停止執(zhí)行被包含文件下面的內(nèi)容。但php3.0和php4.0在處理這樣的情況時(shí)有所不同。在php3.0中return語句不能包含在{}內(nèi),除非它在一個(gè)函數(shù)中,因?yàn)檫@時(shí)它表示函數(shù)的返回值而不是文件的返回值。而在php4.0中就沒有了這樣的限制,用戶甚至可以在文件中返回一個(gè)數(shù)字,就象函數(shù)的返回值一樣。這樣的語句在 

php3.0中通常會(huì)報(bào)告錯(cuò)誤。以下舉例說明: 
    假設(shè)被包含的文件為test.inc和主文件main.php位于一個(gè)目錄中。test.inc的內(nèi)容如下: 
test.inc 
<?php 
  echo "Before the return<br>/n"; 
  if(1) 
  { 
    return 27; 
  } 
  echo "After the return<br>/n"; 
?> 

假設(shè)在main.php文件中包含下面的語句: 
<?php 
  $retval=include('test.inc'); 
  echo "File returned:'$retval'<br>/n"; 
?> 
  php3.0解釋器會(huì)在第二行報(bào)告錯(cuò)誤,而不能得到include()語句的返回值。但在php4.0中會(huì)得到下面的結(jié)果: 
  Before the return 
  File returned: '27' 
  下邊假設(shè)main.php改為: 
<?php 
  include('test.inc'); 
  echo "Back in main.html<br>/n"; 
?> 
  在php4.0中的輸出結(jié)果是: 
  Before the return 
  Back in main.html 

  在php5.0中的輸出結(jié)果也是: 
  Before the return 
  Back in main.html 

  在php3.0中的輸出結(jié)果是: 
  Before the return 
  27Back in main.html 

  Parse error:parse error in /apache/htdocs/phptest/main.html on line 5 

  出現(xiàn)上面的錯(cuò)誤是因?yàn)閞eturn語句位于{}內(nèi)部而且不是一個(gè)函數(shù)內(nèi)部。如果把{}去掉,使它位于test.inc的最外層,輸出結(jié)果是: 
  Before the return 
  27Back in main.html 
  之所以出現(xiàn)27,是因?yàn)樵?a href=/itjie/phpjishu/ target=_blank class=infotextkey>php3.0中不支持include()返回。 

3.require_once()和include_once()語句 
  require_once()和include_once()語句分別對(duì)應(yīng)于require()和include()語句。require_once()和include_once()語句主要用于需要包含多個(gè)文件時(shí),可以有效地避免把同一段代碼包含進(jìn)去而出現(xiàn)函數(shù)或變量重復(fù)定義的錯(cuò)誤。例如:如果創(chuàng)建兩個(gè)文件util.inc和fool.inc,程序代碼分別為: 
  util.inc: 
  <?php 
    define(phpVERSION,floor(phpversion())); 
    echo "GLOBALS ARE NICE<br>/n"; 
    function goodTea() 
    { 
      return "Olong tea tasts good!"; 
    } 
  ?> 
  和fool.inc: 
  <?php 
    require ("util.inc"); 
    function showVar($var) 
    { 
      if(phpVERSION==4) 
      { 
          print_r($var); 
      } 
      else 
      { 
          var_dump($var); 
      } 
    } 
  ?> 
  然后在error_require.php中包含這兩個(gè)文件: 
  <?php 
    require("fool.inc"); 
    require("util.inc");//此句會(huì)產(chǎn)生一個(gè)錯(cuò)誤 
    $foo=array("1",array("complex","quaternion")); 
    echo "this is requiring util.inc again which is also<br>/n"; 
    echo "required in fool.inc/n"; 
    echo "Running goodTea:".goodTea()."<br>/n"; 
    echo "Printing foo:<br>/n"; 
    showVar($foo); 
  ?> 
  當(dāng)運(yùn)行error_require.php時(shí),輸出結(jié)果如下: 
  GLOBALS ARE NICE 
  GLOBALS ARE NICE 

  Fatal error:Cannot redeclare goodTea() in util.inc on line 4 

  如果使用require_once()語句來代替 require()語句,就不會(huì)出現(xiàn)上面的錯(cuò)誤。我們把error_require.php和fool.inc中的require()語句改為require_once()語句并重命名為error_require_once.php,這是顯示結(jié)果如下: 
  GLOBALS ARE NICE 
  this is requiring util.inc again which is also 
  required in fool.inc Running goodTea:Olong tea tastes good! 
  Printing foo: 
  Array([0] => 1 [1] => Array ([0] => complex [1] = quaternion)) 

  include_once()語句的語法和include()語句類似,主要區(qū)別也是避免多次包含一個(gè)文件而引起函數(shù)或變量的重復(fù)定義。 

  require_once語句有一個(gè)引用鏈,它可以保證文件加入你的程序僅僅只有一次,而且會(huì)避開變量值和函數(shù)名之間的沖突。 

  和require_once語句一樣,include_once語句把include的功能擴(kuò)展了。在程序執(zhí)行期間,將指定的文件包含進(jìn)來,如果從文件引用進(jìn)來的程序先前已經(jīng)包含過的時(shí)候,include_once()就不會(huì)把它再包含進(jìn)來。也就是僅僅可以引用同一個(gè)文件一次! 

  include_once() 語句在腳本執(zhí)行期間包含并運(yùn)行指定文件。此行為和 include() 語句類似,唯一區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會(huì)再次包含。如同此語句名字暗示的那樣,只會(huì)包含一次。 

include_once() 應(yīng)該用于在腳本執(zhí)行期間同一個(gè)文件有可能被包含超過一次的情況下,想確保它只被包含一次以避免函數(shù)重定義,變量重新賦值等問題。 

使用 require_once() 和 include_once() 的更多例子見最新的 php 源程序發(fā)行包中的 PEAR 代碼。 

返回值和 include() 相同。如果文件已被包含,本函數(shù)返回 TRUE。 

注: include_once() 是 php 4.0.1pl2 中新加入的。 

注: 要注意 include_once() 和 require_once() 在大小寫不敏感的操作系統(tǒng)中(例如 Windows)的行為 

可能不是所期望的。 
例子: include_once() 在 Windows 下不區(qū)分大小寫 

<?php 
include_once("a.php"); // this will include a.php 
include_once("A.php"); // this will include a.php again on Windows! (php 4 only) 
?>   

此行為在 php 5 中改了,路徑先被規(guī)格化,因此 C:/PROGRA~1/A.php 和 C:/Program Files/a.php 的實(shí)現(xiàn)一樣,文件只會(huì)被包含一次。 

  如果要包含的文件不存在,include提示notice,然后繼續(xù)執(zhí)行下面的語句,require提示致命錯(cuò)誤并且退出。 

  win32平臺(tái)下它們都是先包含后執(zhí)行,所以被包含文件里最好不要再有include或require語句,這樣會(huì)造成目錄混亂。或許Linux下情況不同,暫時(shí)還沒測試。 

  如果一個(gè)文件不想被包含多次可以使用include_once或require_once## 讀取,可以寫入文檔數(shù)據(jù)。 
<?php 
function r($file_name) { 
 $filenum=@fopen($file_name,"r"); 
 @flock($filenum,LOCK_SH); 
 $file_data=@fread($filenum,filesize($file_name)); 
 @fclose($filenum); 
 return $file_data; 

function w($file_name,$data,$method="w"){ 
 $filenum=@fopen($file_name,$method); 
 flock($filenum,LOCK_EX); 
 $file_data=fwrite($filenum,$data); 
 fclose($filenum); 
 return $file_data; 

?>

php技術(shù)require(),include(),require_once()和include_once()的異同,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费久久久 | 欧美日韩精品一区 | 精品综合久久久 | 欧美一区二区 | av入口| 精品一区二区三区免费视频 | 亚洲国产成人精品女人久久久 | 久久久久久91 | 亚洲综合色视频在线观看 | 中文字幕一级 | 日本一区二区电影 | 偷拍自拍第一页 | 亚洲视频在线免费观看 | 成人欧美一区二区三区在线播放 | 91看片网 | 91色站 | 午夜视频一区 | 国产免费一区二区三区最新6 | 欧美一二三四成人免费视频 | a网站在线观看 | 亚洲三级av| 九色网址 | 69性欧美高清影院 | 欧美午夜剧场 | 97在线观看 | 精品一区二区三区免费毛片 | 久久综合久 | 久久免费视频观看 | 久久在视频 | 欧美中文字幕一区二区三区亚洲 | 午夜视频在线免费观看 | 国产高清视频在线观看 | 黄色大片免费观看 | 在线免费观看黄色 | 综合久久久久 | 久草在线在线精品观看 | 国产激情在线观看 | 天天插天天操 | 成人福利片 | 国产精品色 | 欧美一区二区三区 |