2017-04-24 50 views
1

我正在嘗試重寫我的PDO MySQL類,它使用了一種依賴注入的形式。關於PHP OOP範圍的困惑

下面是它的連接:

public function __construct($dsn, $username, $password) 
{ 
    $options = [ 
     PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
     PDO::ATTR_STATEMENT_CLASS => array("EPDOStatement\EPDOStatement", array($this)), 
     PDO::ATTR_EMULATE_PREPARES => false, // allows LIMIT placeholders 
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
    ]; 
    parent::__construct($dsn, $username, $password, $options); 
} 

然後它被稱爲是這樣的:

$dbl = new db_mysql("mysql:host=".$db_conf['host'].";dbname=".$db_conf['database'],$db_conf['username'],$db_conf['password']); 

現在,命名爲 「核心」,它有這樣的__construct另一個類中:

class core 
{ 
    public $database; 
    function __construct($database) 
    { 
     $this->database = $database; 
    } 

public static function config($key) 
{ 
    if (empty(self::$config)) 
    { 
     // get config 
     $get_config = $this->database->select("config", '`data_key`, `data_value`'); 
     $fetch_config = $get_config->fetch_all(); 

     foreach ($fetch_config as $config_set) 
     { 
      self::$config[$config_set['data_key']] = $config_set['data_value']; 
     } 
    } 

    // return the requested key with the value in place 
    return self::$config[$key]; 
} 
} 

這就是所謂的:

$core = new core($dbl); 

所以它需要數據庫連接,並將其分配給在覈心類中設置爲「public」的$數據庫。問題是,當我打電話的配置功能,我得到這個錯誤:

PHP Fatal error: Uncaught Error: Using $this when not in object context 

它提到的錯誤來自行

"$this->database->select" inside the "config"

功能。

+0

如何調用配置功能? –

+0

你的縮進是怎麼回事?這使它很難閱讀。 –

回答

4

您的config方法是靜態的。

無需實例化對象即可訪問靜態方法,因此$this不是當前對象的可用句柄。

+0

是的,就是這樣,謝謝:) – NaughtySquid

1

不能在靜態方法使用$this,因爲$this是引用類的實例,並instance只存在於對象,你可以調用靜態方法,而無需創建對象,因此它不能訪問類的引用..

嘗試將您的方法更改爲非靜態,並在創建後使用它core類對象

+0

與其他答案一樣,但再次感謝:) – NaughtySquid