首頁 後端開發 php教程 require(),include(),require_once()和include_once()的异同_PHP教程

require(),include(),require_once()和include_once()的异同_PHP教程

Jul 21, 2016 pm 03:58 PM
include once require 異同 相似

require()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。 

我把这两个语句放在一起介绍,读者可以比较学习。 
1.require()语句 
  require()语句用于指定的文件代替语句本身,就象C语言中的include()语句一样。如果php配置文件php.ini中的URL fopen wrappers 是打开的(默认情况下是打开的),就可以使用URL来指定文件的位置从而实现远程文件的调用。 
  有一点就是使用require()和include()语句时要特别的注意。那就是在被包含的文件中,处理器是按照html模式来解释其中的内容的,处理完被包含的内容后又恢复到php模式。所以如果需要在被包含文件中使用php语法,就要使用正确的php开始和结束标记来把这些语句包含进去。 
  require()和include()知识php中的一种语言特性,而不是函数。它们和函数有许多不同的地方。 
比如:require()所包含的文件中不能包含控制结构,而且不能使用return这样的语句。在require()所包含的文件中使用return语句会产生处理错误。 
  不象include()语句,require()语句会无条件地读取它所包含的文件的内容,而不管这些语句是否执行。所以如果你想按照不同的条件包含不同的文件,就必须使用include()语句。当然,如果require()所在位置的语句不被执行,require()所包含的文件中的语句也不会被执行。 
  require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。 
  require()语句中的变量继承require()语句所在位置的变量作用域。所有在require()语句的位置可以访问的变量,在require()语句所包含的文件中都可以访问。如果require()语句位于一个函数内部,那么被包含文件内的语句都相当于定义在函数内部。 
  require()语句在PHP程序执行前就会将使用require引用的文件读入,因此require通常放到程序的开始处。因此要特别注意一点,require语句有一点强,不管程序是否真的需要引用的文件,只要你使用require语句,它都会把他们包含进来!即使你是在条件控制语句中使用这个函数进行包含,那怕是那个条件不为真,引用文件也会被包含进来!形成了僵尸,在运行过程中这些僵尸是不起任何可见作用的,但是很明显它会加重负担,所以这一点要特别注意!如果使用require语句发生了包含错误,那么程序将输出出错信息并停止运行!! 

  如果require()语句通过声明文件的URL来包含远程文件,而且远程服务器按照php代码来解释该文件的话,本地php文件中所包含的内容是在远程服务器上处理以后的结果。例如: 
  /* 
    这个例子假设some_server服务器可以解释.php文件,而不对.txt文件进行解释。在远程文件中   
  需要变量$varfirst和$varsecond 
  */ 
  /*不能正确执行,远程服务器不处理.txt文件*/ 
  require("http://some_server/file.txt?varfirst=1&varsecond=2"); 

  /*不正确,这样只能在本地机上寻找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语句不能出现在{}内部,而必须出现在被包含文件的全局范围内。在php4.0中已经取消了require()的这个功能,但是仍然可以使用include()来实现。 

2.include()语句 
  include()语句和require()语句有许多相同的地方。凡是在上边require()语句中没有明确说明不能适用于include()的部分外,require()语句的功能完全适用于include()语句。下边介绍require()语句所没有的include()语句的功能和特点。 
  include语句只有在被执行时才会读入要包含的文件。在错误处理方便,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行! 
    php处理器会在每次遇到include()语句时,对它进行重新处理,所以可以根据不同情况的,在条件控制语句和循环语句中使用include()来包含不同的文件。 
    例如: 
      $files=array('first.php','second.php','third.php'); 
    for($i=0;$i    { 
        include $files[$i]; 
    } 
  ?> 
    在php3.0和php4.0中include()语句所包含的文件中都可以使用return语句来返回一个值,并停止执行被包含文件下面的内容。但php3.0和php4.0在处理这样的情况时有所不同。在php3.0中return语句不能包含在{}内,除非它在一个函数中,因为这时它表示函数的返回值而不是文件的返回值。而在php4.0中就没有了这样的限制,用户甚至可以在文件中返回一个数字,就象函数的返回值一样。这样的语句在 

php3.0中通常会报告错误。以下举例说明: 
    假设被包含的文件为test.inc和主文件main.php位于一个目录中。test.inc的内容如下: 
test.inc 
  echo "Before the return
\n"; 
  if(1) 
  { 
    return 27; 
  } 
  echo "After the return
\n"; 
?> 

假设在main.php文件中包含下面的语句: 
  $retval=include('test.inc'); 
  echo "File returned:'$retval'
\n"; 
?> 
  php3.0解释器会在第二行报告错误,而不能得到include()语句的返回值。但在php4.0中会得到下面的结果: 
  Before the return 
  File returned: '27' 
  下边假设main.php改为: 
  include('test.inc'); 
  echo "Back in main.html
\n"; 
?> 
  在php4.0中的输出结果是: 
  Before the return 
  Back in main.html 

  在php5.0中的输出结果也是: 
  Before the return 
  Back in main.html 

  在php3.0中的输出结果是: 
  Before the return 
  27Back in main.html 

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

  出现上面的错误是因为return语句位于{}内部而且不是一个函数内部。如果把{}去掉,使它位于test.inc的最外层,输出结果是: 
  Before the return 
  27Back in main.html 
  之所以出现27,是因为在php3.0中不支持include()返回。 

3.require_once()和include_once()语句 
  require_once()和include_once()语句分别对应于require()和include()语句。require_once()和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。例如:如果创建两个文件util.inc和fool.inc,程序代码分别为: 
  util.inc: 
      define(PHPVERSION,floor(phpversion())); 
    echo "GLOBALS ARE NICE
\n"; 
    function goodTea() 
    { 
      return "Olong tea tasts good!"; 
    } 
  ?> 
  和fool.inc: 
      require ("util.inc"); 
    function showVar($var) 
    { 
      if(PHPVERSION==4) 
      { 
          print_r($var); 
      } 
      else 
      { 
          var_dump($var); 
      } 
    } 
  ?> 
  然后在error_require.php中包含这两个文件: 
      require("fool.inc"); 
    require("util.inc");//此句会产生一个错误 
    $foo=array("1",array("complex","quaternion")); 
    echo "this is requiring util.inc again which is also
\n"; 
    echo "required in fool.inc\n"; 
    echo "Running goodTea:".goodTea()."
\n"; 
    echo "Printing foo:
\n"; 
    showVar($foo); 
  ?> 
  当运行error_require.php时,输出结果如下: 
  GLOBALS ARE NICE 
  GLOBALS ARE NICE 

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

  如果使用require_once()语句来代替 require()语句,就不会出现上面的错误。我们把error_require.php和fool.inc中的require()语句改为require_once()语句并重命名为error_require_once.php,这是显示结果如下: 
  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()语句类似,主要区别也是避免多次包含一个文件而引起函数或变量的重复定义。 

  require_once语句有一个引用链,它可以保证文件加入你的程序仅仅只有一次,而且会避开变量值和函数名之间的冲突。 

  和require_once语句一样,include_once语句把include的功能扩展了。在程序执行期间,将指定的文件包含进来,如果从文件引用进来的程序先前已经包含过的时候,include_once()就不会把它再包含进来。也就是仅仅可以引用同一个文件一次! 

  include_once() 语句在脚本执行期间包含并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。 

include_once() 应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。 

使用 require_once() 和 include_once() 的更多例子见最新的 PHP 源程序发行包中的 PEAR 代码。 

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

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

注: 要注意 include_once() 和 require_once() 在大小写不敏感的操作系统中(例如 Windows)的行为 

可能不是所期望的。 
例子: include_once() 在 Windows 下不区分大小写 

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 中改了,路径先被规格化,因此 C:\PROGRA~1\A.php 和 C:\Program Files\a.php 的实现一样,文件只会被包含一次。 

  如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。 

  win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许Linux下情况不同,暂时还没测试。 

  如果一个文件不想被包含多次可以使用include_once或require_once## 读取,可以写入文档数据。 
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; 

?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/317675.htmlTechArticlerequire()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。 我把这两个语句放在一起介绍,读者可以...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
如何在技嘉主機板上設定鍵盤啟動功能 (技嘉主機板啟用鍵盤開機方式) 如何在技嘉主機板上設定鍵盤啟動功能 (技嘉主機板啟用鍵盤開機方式) Dec 31, 2023 pm 05:15 PM

技嘉的主機板怎麼設定鍵盤開機首先,要支援鍵盤開機,一定是PS2鍵盤! !設定步驟如下:第一步:開機按Del或F2進入bios,到bios的Advanced(進階)模式普通主機板預設進入主機板的EZ(簡易)模式,需要按F7切換到進階模式,ROG系列主機板預設進入bios的進階模式(我們用簡體中文來示範)第二步:選擇到-【進階】-【進階電源管理(APM)】第三步:找到選項【由PS2鍵盤喚醒】第四步:這個選項預設是Disabled(關閉)的,下拉之後可以看到三種不同的設定選擇,分別是按【空白鍵】開機、按組

CS玩家的首選:建議的電腦配置 CS玩家的首選:建議的電腦配置 Jan 02, 2024 pm 04:26 PM

1.處理器在選擇電腦配置時,處理器是至關重要的組件之一。對於玩CS這樣的遊戲來說,處理器的效能直接影響遊戲的流暢度和反應速度。建議選擇IntelCorei5或i7系列的處理器,因為它們具有強大的多核心處理能力和高頻率,可以輕鬆應對CS的高要求。 2.顯示卡顯示卡是遊戲表現的重要因素之一。對於射擊遊戲如CS而言,顯示卡的表現直接影響遊戲畫面的清晰度和流暢度。建議選擇NVIDIAGeForceGTX系列或AMDRadeonRX系列的顯示卡,它們具備出色的圖形處理能力和高幀率輸出,能夠提供更好的遊戲體驗3.內存電

vue3+vite:src使用require動態匯入圖片報錯怎麼解決 vue3+vite:src使用require動態匯入圖片報錯怎麼解決 May 21, 2023 pm 03:16 PM

vue3+vite:src使用require動態導入圖片報錯和解決方法vue3+vite動態的導入多張圖片vue3如果使用的是typescript開發,就會出現require引入圖片報錯,requireisnotdefined不能像使用vue2這樣imgUrl:require(' …/assets/test.png')導入,是因為typescript不支援require所以用import導入,下面介紹如何解決:使用awaitimport

主機板上的數位音訊輸出介面-SPDIF OUT 主機板上的數位音訊輸出介面-SPDIF OUT Jan 14, 2024 pm 04:42 PM

主機板上SPDIFOUT連接線序最近我遇到了一個問題,就是關於電線的接線順序。我上網查了一下,有些資料說1、2、4對應的是out、+5V、接地;而有些資料則說1、2、4對應的是out、接地、+5V。最好的方法是查看你的主機板說明書,如果找不到說明書,你可以使用萬用電表進行測量。首先找到接地,然後就可以確定其他的接線順序了。主機板vdg怎麼接線連接主機板的VDG接線時,您需要將VGA連接線的一端插入顯示器的VGA接口,另一端插入電腦的顯示卡VGA接口。請注意,不要將其插入主機板的VGA介面。完成連接後,您可以

php include和include_once有什麼差別 php include和include_once有什麼差別 Mar 22, 2023 am 10:38 AM

當我們在使用 PHP 編寫網頁時,有時我們需要在目前 PHP 檔案中包含其他 PHP 檔案中的程式碼。這時,就可以使用 include 或 include_once 函數來實作檔案包含。那麼,include 和 include_once 到底有什麼差別呢?

賽揚g4900與i36100相比哪個比較優? (賽揚g4900與i34170相比哪個比較優?) 賽揚g4900與i36100相比哪個比較優? (賽揚g4900與i34170相比哪個比較優?) Jan 01, 2024 pm 06:01 PM

賽揚g4900和i36100哪個好當涉及到賽揚G4900和I36100這兩款處理器時,毫無疑問,I36100的性能更勝一籌。賽揚處理器通常被視為低階處理器,主要用於廉價筆記型電腦。而I3處理器則主要用於高階處理器,其效能非常出色。不論是玩遊戲還是觀看視頻,使用I3處理器都不會出現任何卡頓情況。因此,如果你有可能,盡量選擇購買英特爾I系列處理器,特別是用於桌上型電腦,這樣你就能享受網路世界的樂趣了。賽揚G4900T性能怎麼樣從性能方面來看,奔騰G4900T在頻率方面表現出色,相比之前的版本,CPU性能

廣聯達軟體電腦設定推薦;廣聯達軟體對電腦的設定需求 廣聯達軟體電腦設定推薦;廣聯達軟體對電腦的設定需求 Jan 01, 2024 pm 12:52 PM

廣聯達軟體是一家專注於建築資訊化領域的軟體公司,其產品被廣泛應用於建築設計、施工、營運等各個環節。由於廣聯達軟體功能複雜、資料量大,對電腦的配置要求較高。本文將從多個方面詳細說明廣聯達軟體的電腦配置推薦,以幫助讀者選擇適合的電腦配置處理器廣聯達軟體在進行建築設計、模擬等操作時,需要進行大量的數據計算和處理,因此對處理器的要求較高。建議選擇多核心、高主頻的處理器,如英特爾i7系列或AMDRyzen系列。這些處理器具有較強的運算能力和多執行緒處理能力,能夠更好地滿足廣聯達軟體的需求。記憶體記憶體是影響計算

require的用法有哪些 require的用法有哪些 Nov 27, 2023 am 10:03 AM

require用法:1、引入模組:在許多程式語言中,require用於引入外部模組或庫,以便在程式中使用它們提供的功能。例如,在Ruby中,可以使用require來載入第三方函式庫或模組;2、導入類別或方法:在一些程式語言中,require用來匯入特定的類別或方法,以便在目前檔案中使用它們;3、執行特定任務:在一些程式語言或框架中,require用於執行特定的任務或功能。

See all articles