PHP使用另一个包含文件中包含的文件中的对象

时间:2012-11-29 14:47:14

标签: php class object include

我会直截了当地说到这一点。似乎无法在互联网上的任何地方找到它。也许它甚至不可能,我也不知道。我真的很喜欢使用方法"划分和规则",自己创建它。尽可能多地拆分文件以便于管理(小文件等)。

但这是我的问题:

我有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个对象吗?因为在索引页面上我将需要来自数据库的一些其他数据。我是否需要为索引页面创建一个对象,为登录表单创建一个对象?

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

干杯,

Clemenz

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

您需要将$db声明为全球

试试这个:

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

答案 3 :(得分:0)

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