如何在函数中的数组中使用变量?

时间:2011-02-26 13:49:34

标签: php mysql connect mysql-connect

Config.php:

$settings = array();

$settings['mysqlhost'] = 'localhost'; // Mysql hostname
$settings['mysqluser'] = '**'; // Mysql username
$settings['mysqlpass'] = '**'; // Mysql password
$settings['mysqldatb'] = '**'; // Mysql database

functions.php:

include_once('config.php'); 

function si_connect_db(){

    $connection = mysql_connect($settings['mysqlhost'], $settings['mysqluser'], $settings['mysqlpass']);
    $selectdb = mysql_select_db($settings['mysqldatb'], $connection);

    if($connection){
        if($selectdb){
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

现在当我这样做时:

include_once('functions.php');
si_connect_db();

我没有联系......我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

默认情况下,在函数内声明的PHP变量在函数内部不可见。


如果您在函数之外声明变量,并希望它在该函数内可见,则必须使用 global 关键字:

function si_connect_db(){

    global $settings; // Make $settings visible inside the function

    $connection = mysql_connect($settings['mysqlhost'], $settings['mysqluser'], $settings['mysqlpass']);
    $selectdb = mysql_select_db($settings['mysqldatb'], $connection);

    ...


有关更多信息,您应该查看手册的Variable scope部分。

答案 1 :(得分:2)

您应该将$settings作为全局变量

function si_connect_db(){
   global $settings;

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

答案 2 :(得分:2)

您必须在函数中使用global关键字让函数知道$settings是全局的。

最好使用define()来定义全局常量,例如:

define(MYSQLHOST, 'localhost');

这样您就不必使用global关键字来定义配置设置。

答案 3 :(得分:1)

这是一个范围问题。基本上$settingssi_connect_db函数不可见。

应该做的是将$settings作为参数传递给si_connect_db函数。这个可以global完成,但是使用全局变量是不好的做法,并且由于很多原因而不满意。可测试性,可维护性,可读性以及通常的OOP设计(因为它打破了封装)。

function si_connect_db($settings) {
    // do stuff here
}

然后:

include_once('functions.php');
si_connect_db($settings);

答案 4 :(得分:0)

您应该在功能中包含您的设置文件。为了上帝的缘故,避免使用全球范围。我也建议你这样做,因为如果你只需要连接,就会调用设置文件。使用我的方法,您还可以忘记每次需要连接时在每个应用程序页面中包含设置文件。使用关键字global只是一个黑客攻击。