我有一个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;
}
这不起作用。我需要在$globalConf
函数中包含全局db_connect()
,但我不想这样做(我有更多的配置变量和需要这些的多个函数,我不想使用所有功能和子功能中的全局$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;
}
答案 0 :(得分:2)
使用参数将数据传递到函数中......例如:
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()
使用这些信息,所以没有必要将它保持在类内的全局级别。如果您手动调用该方法,则可以在$dbinfo
中添加db_connect()
参数,这样您就不需要__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']);
只需选择最适合您需求的产品。
答案 1 :(得分:2)
除了将数据传递给已经提到的函数之外,您还可以为配置或全局数据创建一个类,并使用静态访问方法来检索它们。
<?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');