0

我的问题很简单,但我无法解决。

在我的 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 声明为全局。我收到错误“未定义的变量:配置...”“...在connect.php中”。请帮忙。

4

4 回答 4

3

您看不到类内部的变量,因为它是在外部声明的。将其传递给类,使用依赖注入setter 或构造函数注入),然后$config将在您的连接类中可用。

于 2013-05-12T15:47:35.747 回答
2

您必须使用global关键字来指定何时要包含全局变量。例如,它是这样工作的:

$config = array ('one' => 'two');

class Foo {
    public function bar() {
        print_r($config); // NULL
        global $config;
        print_r($config); // Array ( 'one' => 'ywo' )
    }
}
于 2013-05-12T15:48:18.753 回答
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 $config;
于 2013-05-12T15:49:26.990 回答
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;
    }
}
于 2013-05-13T05:26:10.690 回答