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();
我没有联系......我怎么能这样做?
答案 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;
答案 2 :(得分:2)
您必须在函数中使用global
关键字让函数知道$settings
是全局的。
最好使用define()
来定义全局常量,例如:
define(MYSQLHOST, 'localhost');
这样您就不必使用global
关键字来定义配置设置。
答案 3 :(得分:1)
这是一个范围问题。基本上$settings
对si_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只是一个黑客攻击。