我有一个config.php文件,其中包含:
$globalConf = array(
'DbConfig' => array(
'Hostname' => 'localhost',
'Username' => 'myuser',
'Password' => 'xxxxxxxx',
'Database' => 'mydb'
)
);
在其他文件(包括config.php)中,我有这个函数:
function db_connect()
{
if (!($db_link = mysqli_connect($globalConf['DbConfig']['Hostname'], $globalConf['DbConfig']['Username'], $globalConf['DbConfig']['Password'], $globalConf['DbConfig']['Database'])))
exit();
return $db_link;
}
这行不通。我需要在db_connect()
函数中包含全局$globalConf
,但我不想这样做(我有更多的配置变量和多个需要这些变量的函数,我不想在所有函数和子函数中使用全局$variable
)。
我想将$globalConf
设置为持久全局变量(可能像类一样可访问?),例如:
mysqli_connect(myglobal::$globalConf['DbConfig']['Hostname'])
怎么能做到这一点?
已解决:
class MainConf {
public static $globalConf = array(
'DbConfig' => array(
'Hostname' => 'localhost',
'Username' => 'myuser',
'Password' => 'xxxxxxxx',
'Database' => 'mydb'
)
);
}
和:
function db_connect()
{
if (!($db_link = mysqli_connect(MainConf::$globalConf['DbConfig']['Hostname'], MainConf::$globalConf['DbConfig']['Username'], MainConf::$globalConf['DbConfig']['Password'], MainConf::$globalConf['DbConfig']['Database'])))
exit();
return $db_link;
}
除了将数据传递给函数(前面已经提到过)之外,您还可以为配置或全局数据创建一个类,并使用静态访问方法来检索它们。
<?php
class DbConfig {
private static $data = array(
'Hostname' => 'localhost',
'Username' => 'username',
// ...
);
public static function get($name) {
return array_key_exists($name, self::$data) ? self::$data[$name] : '';
}
}
然后在你的功能中,你会像一样访问它
DbConfig::get('Hostname');
使用参数将数据传递到函数中。。。例如:
function db_connect($dbinfo) {
if (!($db_link = mysqli_connect($dbinfo['Hostname'], $dbinfo['Username'], $dbinfo['Password'], $dbinfo['Database'])))
exit();
return $db_link;
}
并称之为
db_connect($globalConf['DbConfig'])
我认为这是最简单的方法。
更新
class MainConf {
public $db; // this will get your $globalConf['DbConfig'] array
function __construct($dbinfo) {
$this->db = $dbinfo; // assign it to $db on class construction
}
function db_connect() {
// use it where you want
if (!($db_link = mysqli_connect($this->db['Hostname'], $this->db['Username'], $this->db['Password'], $this->db['Database'])))
exit();
return $db_link;
}
}
现在您可以将外部数据传递到这样的类中:
$conf = new MainConf($globalConf['DbConfig']);
$dblink = $conf->db_function();
这样就不必在类中定义数据。只需将其作为参数传递,将该参数分配给类变量,并在类中的任何位置使用这些信息。
但我猜您只将这些信息用于db_connect()
,所以没有必要在类内将其保持在全局级别。如果您手动调用该方法,您可以在db_connect()
中添加$dbinfo
参数,这样您就不需要__construct()
方法,并且您的类将看起来像这个
class MainConf {
function db_connect($dbinfo) {
if (!($db_link = mysqli_connect($dbinfo['Hostname'], $dbinfo['Username'], $dbinfo['Password'], $dbinfo['Database'])))
exit();
return $db_link;
}
}
现在称之为
$conf = new MainConf;
$dblink = $conf->db_connect($globalConf['DbConfig']);
只需选择最适合您需求的即可。