【问题标题】:User variable from include-file in function函数中包含文件的用户变量
【发布时间】:2013-09-23 22:17:13
【问题描述】:

我正在尝试完成以下操作:

我有一个文件 conn.inc.php,其中包含名为 DatabaseConnection 的类:

pastebin(因为它有点长)

然后我有第二个包含称为bootstrap.inc.php

<?php
    global $dbcon;
    $dbcon = new DatabaseConnection();
    $dbcon->setHostname("localhost");
    $dbcon->setUsername("root");
    $dbcon->setPassword("password");
    $dbcon->setDatabase("database");
?>


我还有第三个整体functions.inc.php,如果需要,它会被包括在内:

<?php include 'conn.inc.php'; ?>
<?php include 'bootstrap.inc.php'; ?>
<?php 

function myFunction()
{
    $db = $dbcon->getConnection();
    $sql = "CALL ssp_MySP()";
    $result = $db->query($sql) or trigger_error($db->error."[$sql]");

    ....
}
?>


现在,每次我调用 myFunction 时,我在打开连接时都会收到一个错误 -> $db = $dbcon-&gt;getConnection(); 说变量 $dbcon 未定义。


如何在位于functions.inc.php 的函数中使用$dbcon

【问题讨论】:

    标签: php variables include


    【解决方案1】:

    函数内的$db 变量是(该函数的)局部变量。如果要访问函数外部的变量,请使用 global 关键字。这与variable scope 有关。

    <?php include 'conn.inc.php'; ?>
    <?php include 'bootstrap.inc.php'; ?>
    <?php 
    
    function myFunction()
    {
        global $dbcon;
        $db = $dbcon->getConnection();
        $sql = "CALL ssp_MySP()";
        $result = $db->query($sql) or trigger_error($db->error."[$sql]");
    
        ....
    }
    ?>
    

    【讨论】:

    • 我认为你在这里误解了一些东西。我想在我的函数中使用$dbcon,这似乎不起作用(尽管在bootstrapper.inc.php 中创建了$dbcon global
    • @seph 抱歉,您需要在函数中将$dbcon 设为全局。
    • 这样做我不会覆盖来自bootstrap.inc.php$dbcon-var 吗?
    • 不,你不会。你就是这样做的。 (也可以在php documentation 中阅读。)
    • 非常感谢,我是PHP新手,非常感谢。
    【解决方案2】:

    在每个文件的开头添加global $dbcon;

    【讨论】:

    • 我尝试将它添加到我的bootsrap.inc.php,但没有成功。 “每个文件”是什么意思?因为我总是包含functions.inc.php,所以我认为将其添加到我的bootstrapper.inc.php 就足够了。
    • 您需要在bootstrap.inc.php 中指定该变量在全局范围内可用,然后在您打算使用它的每个文件中再次将变量带入该文件。
    • 我现在有点困惑。我的意图是只在其他文件中包含functions.inc.php-文件。我认为既然bootstrap.inc.php 包含在我的functions.inc.php 中,在$dbconglobally 中指定bootstrap.inc.php 就足够了(请参阅开篇中的编辑)?
    • 您需要在functions.inc.php中添加global $dbcon;
    • 把全局变量想象成一个主池。每次调用global $somevariable; 时,它都会说该文件中的$somevariable 应该引用全局副本。这适用于读取、写入、方法调用等任何事情。你需要在任何你想使用$somevariable的文件中调用global
    猜你喜欢
    • 2012-05-21
    • 2013-01-22
    • 2014-07-18
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多