我的问题非常简单,但我无法解决。
在我的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"]);
我的问题是我的Connection类没有看到config.php中声明的$ config变量。我也尝试将$ config声明为全局。我收到错误“Undefined variable:config ...”“......在connect.php中”。 请帮忙。
答案 0 :(得分:3)
您无法在类中看到变量,因为它在外部声明。把它传递给全班,
使用依赖注入(either setter or constructor injection),然后$config
将在您的连接类中可用。
答案 1 :(得分:2)
您必须使用global
关键字指定何时包含全局变量。
例如,这就是它的工作原理:
$config = array ('one' => 'two');
class Foo {
public function bar() {
print_r($config); // NULL
global $config;
print_r($config); // Array ( 'one' => 'ywo' )
}
}
答案 2 :(得分:0)
我建议在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);
否则你设置$ config global:
global $config;
答案 3 :(得分:0)
我这样解决:
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;
}
}