我的问题很简单,但是我解决不了。
在我的index.php中,我包含了两个PHP文件
require_once("/lib/config.php");
require_once("/lib/connect.php");
在配置文件中声明变量#config
$config = array(
"db" => array(
"www_db" => array(
"username" => "user1",
"password" => "pass1",
"conn_string" => "blabla"
)
),
"paths" => array("images" => $_SERVER["DOCUMENT_ROOT"] . "/images")
);
在connect.php中我有一个单例类Connection.
class Connection
{
private static $instance = NULL;
public static function getInstance()
{
if (!self::$instance)
self::$instance = new Connection();
return self::$instance;
}
private $conn;
// Create connection to Oracle
public function getConnection()
{
//if (INCLUDE_CHECK == true)
// {
$conn = oci_connect($this -> $config["db"]["www_db"]["username"],
$this -> $config["db"]["www_db"]["password"],
$this -> $config["db"]["www_db"]["conn_string"]);
我的问题是,我的连接类没有看到$config变量在config.php声明。我还尝试将$config声明为全局。我得到错误"未定义的变量:配置…"…connect.php"。请帮助。
不能在类内部看到变量,因为它是在外部声明的。把它传给同学们,使用依赖注入 (setter或构造函数注入),然后$config
将在您的连接类中可用。
您必须使用global
关键字来指定何时要包含全局变量。例如,它是这样工作的:
$config = array ('one' => 'two');
class Foo {
public function bar() {
print_r($config); // NULL
global $config;
print_r($config); // Array ( 'one' => 'ywo' )
}
}
我建议在Connection.class中添加一个新的setter方法,如:
public function set_config($config = array()) {
if (empty($config)) return false;
$this->_username = $config["username"];
$this->_password = $config["password"];
// ...
}
然后您可以在其他方法中使用这些数据,例如:
oci_connection($this->_username, $this->_password);
global $config;
我是这样解决的:
private $username = "usr1";
private $password = "pass1";
private $conn_string = "connection_string";
private $conn;
// Create connection to Oracle
public function getConnection()
{
$conn = oci_connect($this -> username,
$this -> password,
$this -> conn_string);
if (!$conn) {
$m = oci_error();
echo $m['message'], "'n";
exit;
}
else
{
return $conn;
}
}