如何正确地要求PHP文件



我在我的网站上使用两个主要的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: %sn", mysqli_connect_error());
        exit();
    }
    $query = 'SELECT * FROM '.constant('membersTable').' WHERE steamID = '.$steamID;
    if($result = mysqli_query($link, $query)) {
        return mysqli_fetch_assoc($result);
    }
}

require如何真正处理文件间依赖关系?为什么我的代码行为如此怪异/我该如何修复它?

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

如果这个问题读起来有点令人困惑,我很抱歉。我真的想不出一个好的方法来表达我的问题(尤其是因为我不确定自己是否理解这个问题)。

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

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

require_one语句与require完全相同,只是PHP将检查文件是否已包含,如果已包含,则不包含再次要求。

不要那样做。花点时间阅读以下内容:

http://www.php-fig.org/psr/psr-0/

http://www.sitepoint.com/php-dependency-management-with-composer/

http://nelm.io/blog/2011/12/composer-part-1-what-why/

https://phpbestpractices.org/

http://www.phptherightway.com/

确保遵循所有PSR。

最新更新