PHP类中的变量范围

时间:2013-05-12 15:43:43

标签: php

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

在我的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中”。 请帮忙。

4 个答案:

答案 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;
    }
}