台灣最大程式設計社群網站
線上人數
997
 
會員總數:246202
討論主題:189774
歡迎您免費加入會員
討論區列表 >> PHP >> 請問include與require的差異?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問include與require的差異?
價值 : 15 QP  點閱數:1414 回應數:7
樓主

Eric16899
初學者
598 136
1829 306
發送站內信

新手請教

include("checkpwd.php");
require("../include/menu.php");
程式中兩者都是整合進程式中,

請問include與require的差異?

本篇文章發表於2012-02-02 22:40
1樓
回應

那顆爛蔥
捐贈 VP 給 那顆爛蔥 檢舉此回應
http://tino.loxa.edu.tw/php/kojiro/inre.html
本篇文章回覆於2012-02-03 01:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

那顆爛蔥
捐贈 VP 給 那顆爛蔥 檢舉此回應
多參考一個
http://www.wretch.cc/blog/persongood/13829179
本篇文章回覆於2012-02-03 01:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
我用白話點的說法好了

require就有點像是 call 。也就是先去運行這些程式。與目前運行的程式是分兩個程式在運行。
如A require B

則運行是 A -> B -> A.....

而include就像是IN。也就是將程式碼插入進來。運行程式動作可以說是在同一支程式。

如A include B

則運行是 A(B)=>A.....

不知道這樣是否有明白。

一般我個人,會將require放在開頭,如require('global.php') 或是 require('init.php')

而在程式中間有可能還需要引入的就會用include
本篇文章回覆於2012-02-03 12:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

Solty
檢舉此回應
require 先執行再插入
include 先執行再執行
其實這只是廣義上的解釋,實務中你會發現不全然是這樣,真正會發生影響的部份其實是在路徑起點的判斷

a.php


main.php

那我們來看看官方的說法....
http://php.net/manual/en/function.require.php
require() is identical to include() except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include() only emits a warning (E_WARNING) which allows the script to continue.
See the include() documentation for how this works.
官方的解釋是,require與include是一樣的,差別在於,在找不到指定檔案時會產生一個E_COMPILE_ERROR級別的錯誤,造成程式強制中斷

實務中會碰到的問題是...路徑起點的差異

假設你的伺服器上的網站根目錄如下
main.php
x.php
include/a.php
include/b.php
require/a.php
require/b.php

2個a.php的內容都一樣


2個b.php的內容也都一樣


main.php //現在假定主程式在根目錄
<?php
include 'include/a.php';
require 'require/a.php';
?>
現在你會發現輸出的路徑是不同的
require的路徑起點是該檔案所在的位置
include的路徑起點則是main.php所在的位置

當main.php的情況變成

本篇文章回覆於2012-02-03 12:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Eric16899
檢舉此回應
謝謝大大們的解說,遠比我google找的資料(或許看得不夠多)
一般是說兩者若發生錯誤時 一個會停止 一個會繼續RUN後面的程式.

目前開發的系統 我會用到的是 把共通地方寫到另外的檔案:

HTML 標題 HTM_Head.php
連資料庫的程式碼 DB_CON.php
共通的選單(menu) Menu_item.php
HTML 結尾 HTM_Foot.php
然後再依不同Table所寫的程式include()進來,
那請問那些適合用 include() 那些用 require()?
或者使用 include_once() require_once()?


本篇文章回覆於2012-02-03 22:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
_once 一般是看你插入的程式碼用意為何。

如你的程式全是用FUNCTION所構成的。那一般會都會_once。這樣也可以避免重覆宣告的錯誤。

但如果是如下的程式,如會一直重覆運行的程式。這可能不太好解釋。我用程式碼說明會比較快

A.php


B.php


試將A.php第一跟第二行交替使用。你會發現輸出的$data不一樣
使用include的 會分別輸出 abc
但使用include_once則會只輸出 aaa

一般一個原則,想載入class或是function庫的程式,或是單純的初始宣告用的程式。大多會用once。因為那不是重覆運行計算的程式。
但如果有可能程式是屬於引入式計算的程式碼。那就等於你不能用once了。免得跑一次就不會再跑了。
本篇文章回覆於2012-02-04 09:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Eric16899
檢舉此回應
Tank you!
本篇文章回覆於2012-02-08 15:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.