我试图重新编写我的PDO MySQL类,它使用了一种依赖注入形式。
以下是它的连接方式:
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']);
现在,在另一个名为" core"的类中。它在__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);
所以它接受数据库连接,并将其分配给$ database,该数据库被设置为" public"核心课内。问题是当我调用配置函数时,我收到此错误:
PHP Fatal error: Uncaught Error: Using $this when not in object context
它提到错误来自行
"$this->database->select" inside the "config"
功能
答案 0 :(得分:4)
您的config
方法是静态的。
可以在没有实例化对象的情况下访问静态方法,因此$this
不是当前对象的可用句柄。
答案 1 :(得分:1)
你不能在静态方法中使用$this
,因为$this
是对类实例的引用,instance
只存在于对象中,你可以在不创建对象的情况下调用静态方法,所以它无法访问类引用..
尝试将您的方法更改为非静态方法,并在创建core
类对象