1

我将直截了当。似乎无法在互联网上的任何地方找到它。也许这甚至不可能,我不知道。我真的很喜欢使用“分而治之”的方法,我自己创建的。尽可能多地拆分文件以便于管理(小文件等)。

但这是我的问题:

我有 5 个文件:

index.php
inc/config.php
inc/Database.class.php
inc/sidebar.php
inc/forms.php

好的,我所做的是:

在我的 config.php 文件中,我包含了 Database.class.php 文件并创建了一个对象。

include 'Database.class.php';

$user = "root";
$pass = "";
$host = "localhost";
$database = "blah blah";

$db = new Database($user, $pass, $host, $database);
$db->connect();

所以我在我的 index.php 文件中包含了这个 config.php 和 sidebar.php。

(缩短了代码,但功能相同)

include 'inc/config.php';
include 'inc/sidebar.php';

在我的侧边栏中,我有一个表单,供用户登录。

在sidebar.php中我只包含forms.php,这是forms.php:(我使用print_r调试我的文件,看看是否有任何返回,我省略了方法loginFormShow,因为它很长而且不相关)

function loginFormProcess($user, $pass)
{
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}


if (!isset($_POST['submit'])) {
    loginFormShow();
} else {

    if ($_POST['user'] == "") 
    {
        loginFormShow(1);
    } 
    else if ($_POST['pass'] == "") 
    {
        loginFormShow(2);
    } 
    else 
    {
        $user = $_POST['user'];
        $pass = $_POST['pass'];
        loginFormProcess($user, $pass);
    }
}

因此,问题是什么。当我尝试调用函数 loginFormProcess 时,它不能使用对象 $db。

我可以为此使用 1 个对象吗?因为在索引页面上,我将需要数据库中的一些其他数据。我是否需要为索引页面创建一个对象并为登录表单创建一个对象?

还有其他解决方案吗?如果我不清楚,我很乐意提供更多解释。

干杯,

克莱门茨

4

4 回答 4

3

最好的解决方案是将数据库对象传递给函数的参数,如下所示:

function loginFormProcess($user, $pass, Database $db) {

并使用适当的数据库对象调用它。这就是所谓的

于 2012-11-29T14:51:30.713 回答
0

尝试这个:

function loginFormProcess($user, $pass)
{
    global $db;
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}

供参考: http: //php.net/manual/en/language.variables.scope.php

于 2012-11-29T14:52:43.050 回答
0

您需要声明$dbglobal

尝试这个:

function loginFormProcess($user, $pass)
{
    global $db;
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}

见:http ://www.php.net/manual/en/language.variables.scope.php

于 2012-11-29T14:53:20.400 回答
0

变量 $db 在您的 config.php 文件中创建为全局变量。这在 loginFormProcess 函数内部是不可见的。您可以使用的一个快照解决方案是通过添加语句 global $db; 来声明您使用全局变量的意图。作为函数中的第一条语句

于 2012-11-29T14:54:42.283 回答