2009-07-21 88 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等