使用Require_once()正确包含数据库连接变量

Jef*_*Fay 8 php scope require-once

我是一个php新手(但是其他语言的长期开发人员),我正在尝试"PHP,MySQL和JavaScript"中的一些示例数据库连接.它显示了一个包含数据库连接变量(服务器名,用户名,密码,数据库等)的示例文件.我有一个php文件,它有一些我写的函数,其中一个有一些SQL查询.无论出于何种原因,在该文件中调用require_once不会输出任何错误(我已经配置了E_ALL),但我的数据库php文件中的那些变量是null.

我用该函数中的所有变量调用了一个回声,看看它到底发生了什么,当然它打印出一个空白行.世界上什么超出了范围?我不得不错过一些简单的东西.

这是我正在做的一个例子

db_login.php

<?php
    $db_server = 'localhost';
    // ....
?>
Run Code Online (Sandbox Code Playgroud)

的functions.php

<?php
    require_once('db_login.php');

    function myfunction() {
        echo "$db_server";
        // ...
    }
?>
Run Code Online (Sandbox Code Playgroud)

叫我疯了,但这应该不够简单吗?

Pet*_*tai 7

PHP没有像Javascript这样的函数作用域,因此您无法访问db_login.php函数内部的变量functions.php.

有多种方法可以解决这个问题.由于您可能使用服务器名称,全局常量可能是一个很好的解决方案,因为没有什么可以改变它们.

在您的情况下,您可以这样做:

<?php
    require_once('db_login.php');
      // You have access to $db_server here.
      // Create a constant.
    define("DB_SERVER", $db_server);

    function myfunction() {
          // Using a constant. Note that there is no "$".
        echo DB_SERVER ;
          // Constants are interpreted inside double quotes too
        echo "\nMy constant is DB_SERVER";
        // ...
    }
?>
Run Code Online (Sandbox Code Playgroud)

在您的情况下,将服务器名称作为常量可能是合适的.如果您要处理要作为真实变量处理的内容,可以通过值或引用将变量传递给函数:

myfunction($variable);

  // by value
function myfunction($pass_variable_to_me_by_value)
{
    echo $pass_variable_to_me_by_value;
    // ...
}

function myfunction(& $pass_variable_to_me_by_reference)
{
    echo $pass_variable_to_me_by_reference;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

作为注释,在您的情况下,在函数内使用global关键字或$ GLOBALS数组与通过引用传递基本相同.,但是如果你没有从全球范围传递,它们可能会非常不同(例如在一个类或另一个函数中).


wup*_*tah 6

您声明的变量db_login.php是全局变量.为了在函数中访问它们,您需要使用$GLOBALS变量,例如$GLOBALS['db_server'],或者使用global关键字将它们声明为函数内的全局变量,例如global $db_server.


Fel*_*ins 5

在函数"myfunction"内部,您无权访问这些变量...

请参阅:http://php.net/manual/en/language.variables.scope.php