【问题标题】:How to properly require PHP files如何正确地要求 PHP 文件
【发布时间】:2014-09-07 01:26:16
【问题描述】:

我在我的网站上使用 2 个主要的 PHP 文件作为脚本。一种专注于从 MySQL 数据库访问数据,另一种则包含网站所需的功能。在某些函数中(在函数文件中),我需要从我的 MySQL 文件中调用函数。我不明白如何正确地要求这些文件,以便在需要时可以使用它们。

include 'scripts/MySQL.php';
include 'scripts/functions.php';

位于页面文件的顶部(我直接使用两个文件中的函数)。 然后当我需要在functions.php 中使用MySQL 函数时,如果我不需要functions.php 文件顶部的MySQL.php,则MySQL 函数为空,但如果我这样做,我会收到此错误: Fatal error: Cannot redeclare getUserInfo() (previously declared in .../scripts/MySQL.php:2) in .../scripts/MySQL.php on line 16 .这是getUserInfo(第2行是发布的第一行,第16行是最后一行):

function getUserInfo($steamID) {
    $link = mysqli_connect(constant('DB_SERVER'), constant('DB_USER'), constant('DB_PASS'), constant('DB_NAME'));

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $query = 'SELECT * FROM '.constant('membersTable').' WHERE steamID = '.$steamID;

    if($result = mysqli_query($link, $query)) {
        return mysqli_fetch_assoc($result);
    }
}

require 如何真正处理文件间依赖关系?为什么我的代码表现得如此奇怪/我该如何解决?

另外,如果我想从另一个文件访问变量,我是否必须在每个使用变量的函数中都需要该文件,或者我可以在包含函数的文件顶部需要它(后者似乎没有工作)?

对不起,如果这个问题读起来有点混乱。我真的想不出一个好的方法来表达我的问题(尤其是因为我不确定我自己是否理解这个问题)。

【问题讨论】:

  • 您是否也包含来自任何其他文件的文件?您似乎不止一次地包含文件。你能提供你的完整代码吗?
  • 您包含 Mysql.php 两次,因为 functions.php 需要访问它,但这会产生致命错误。 FuzzyTree require_once 发布的答案应该可以解决这个问题
  • 跟着 PSR-0 走就安全了。

标签: php require


【解决方案1】:

使用include_oncerequire_once 避免重新声明您的函数

require_once 'scripts/MySQL.php';
require_once 'scripts/functions.php';

require_once 语句与 require 相同,只是 PHP 会 检查文件是否已被包含,如果是,则不包含 (要求)再次。

【讨论】:

  • 但是如果我两次声明它以获得致命错误,如果我不需要它,为什么 MySQL 函数为空?这似乎与已经需要它的假设相矛盾。
  • 不要包含或要求这样的文件。你会在纯粹的地狱里。使用真实的类和正确的自动加载。这就是存在诸如 PSR 之类的标准的原因。为了让您免于使用 PHP 编程可能会造成的混乱。
  • 如果您不得不求助于require_once 不多次加载文件,这样您的代码才能发挥作用,那么您很可能失去了对代码中发生的事情的控制。你应该退后一步,重新评估发生了什么,然后正确地编写代码。
  • @SverriM.Olsen 我最终不必使用它,我更正了我的代码,现在一切正常。
【解决方案2】:

【讨论】:

  • 这是一个常见的例子,一个正确的答案被否决只是为了好玩。 +1 修复偏移量
  • 不幸的是,喷子会喷子。
猜你喜欢
  • 2015-03-30
  • 2019-09-07
  • 2015-09-25
  • 2012-11-15
  • 2011-12-24
  • 2019-05-24
  • 2011-12-14
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多