Я пытаюсь переписать мой 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" внутри основного класса. Проблема в том, что когда я вызываю функцию config, я получаю эту ошибку:
PHP Fatal error: Uncaught Error: Using $this when not in object context
Упоминается, что ошибка исходит из строки
"$this->database->select" inside the "config"
Функция .
2 ответа
Ваш config
метод является статическим.
Доступ к статическим методам возможен без создания объекта, поэтому $this
не является доступным дескриптором текущего объекта.
Вы не можете использовать $this
в статическом методе, потому что $this
является ссылкой на экземпляр класса, а instance
существует только в объектах, вы можете вызывать статический метод без создания объекта, поэтому он не может получить доступ ссылка на класс
Попробуйте изменить свой метод на нестатический и использовать его после создания объекта класса core
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.