2009-07-21 84 views
0

我知道includerequire之間的區別。我在我的項目的幾個地方使用require幫我理解包含/要求在PHP

但是這裏是一件事情:我想包含文件一次,並能夠從其他包含文件調用它的功能。

在我的header.php文件,我有以下代碼:現在

<?php 
    require_once('include/dal.php'); 
    require_once('include/bll.php'); 
    require_once('include/jquery_bll.php'); 
?> 

,在我的javascript,我打電話使用jQuery.post的jquery_bll.php,並在jquery_bll.php文件I有下面的代碼:

$myDB = new DAL(); 

我的問題是,我得到錯誤信息「類‘DAL’在沒有找到(..)\ jquery_bll.php」。

我偵察我得到這個消息,因爲該文件從一個javascript調用,因此「範圍」之類的東西外...

所以,反正是有包括header.php中所需要的文件而不必擔心再次包含相同的文件?

回答

4

您還需要把

require_once('include/dal.php'); 
    require_once('include/bll.php'); 

jquery_bll.php的頂部,或者包括您完整的頭文件那裏。

當您的JavaScript回調到jquery_bll.php時,這是一個單獨的HTTP請求,這將導致PHP只評估該文件。由於該文件似乎沒有包含header.php,因此不會執行確保加載DAL類的require_once語句。

+1

當然,他是對的。您必須確保在每個HTTP請求上調用這些require_once構造,以確保文件的內容可用。 – 2009-07-21 11:39:25

+0

好吧,上面有我的一些評論,陳述克里斯是錯的... – 2009-07-21 11:40:21

0

當從客戶端向jquery_bll.php發出一個請求時,它會被稱爲全新頁面。任何包括以前的請求都會被遺忘。所以是的,正如所建議的,你必須在jquery_bll.php的頂部再次包含必要的'includes'。

編輯: 如果你使用PHP5,你可以使用它autoload功能,你可以讓你的包括/文件夾看,如果一個類沒有定義

function __autoload($class_name) { 
require_once 'include/' . $class_name . '.php'; 

}

雖然你將不得不小心大寫和小寫,也許做一些處理達爾與DAL等