【问题标题】:help me understand include / require in PHP帮助我理解 PHP 中的 include / require
【发布时间】:2009-07-21 11:27:05
【问题描述】:

我知道includerequire 之间的区别。我在项目的几个地方都使用了require

但事情是这样的:我想包含一次文件并能够从其他包含文件中调用它的函数。

在我的 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 文件中我有以下代码:

$myDB = new DAL();

我的问题是我收到错误消息“在 (..)\jquery_bll.php 中找不到类 'DAL'”。

我发现我收到此消息是因为该文件是从 javascript 调用的,因此它超出了“范围”之类的......

那么,有没有办法在 header.php 中包含所需的文件,而不必担心再次包含相同的文件?

【问题讨论】:

    标签: php include


    【解决方案1】:

    你还需要把

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

    在您的 jquery_bll.php 之上,或者在其中包含您的完整头文件。

    当您的 JavaScript 回调 jquery_bll.php 时,这是一个单独的 HTTP 请求,这将导致 PHP 只评估该文件。由于该文件似乎不包含您的 header.php,因此不会执行确保已加载 DAL 类的 require_once 语句。

    【讨论】:

    • 他当然是对的。您必须确保在每个 HTTP 请求上调用这些 require_once 构造,以确保文件的内容可用。
    • 是的也发生在我身上,刚刚删除了我的评论:-D
    【解决方案2】:

    当客户端向 jquery_bll.php 发出请求时,它被称为一个全新的页面。先前请求中的任何包含等都将被遗忘。所以是的,正如建议的那样,您必须在 jquery_bll.php 的顶部再次包含必要的“包含”。

    编辑: 如果您使用的是 PHP5,您可以使用它的 autoload 功能,如果尚未定义类,您可以查看您的 include/ 文件夹

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

    }

    虽然您必须注意大写和小写,并且可能对 dal 与 DAL 等进行一些处理

    【讨论】:

    • 嗯..好的。我希望包含的文件驻留在某个内存库中,就像在 html 标头中包含 js 文件一样。
    猜你喜欢
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多