У меня есть этот класс для подключения к базе данных mysql
с помощью php
/ mysqli
:
class AuthDB { private $_db; public function __construct() { $this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die("Problem connect to db. Error: ". mysqli_error()); } public function __destruct() { $this->_db->close(); unset($this->_db); } }
сclass AuthDB { private $_db; public function __construct() { $this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die("Problem connect to db. Error: ". mysqli_error()); } public function __destruct() { $this->_db->close(); unset($this->_db); } }
теперь у меня есть страница для пользователя списка:
require_once 'classes/AuthDB.class.php'; session_start(); $this->_db = new AuthDB(); // error For This LINE $query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?"; $stmt = $this->_db->prepare($query); //bind parameters $stmt->bind_param("s", $email); //execute statements if ($stmt->execute()) { //bind result columnts $stmt->bind_result($id, $salt, $pass, $active, $ver); //fetch first row of results $stmt->fetch(); echo $id; }
теперь, я вижу эту ошибку:
Fatal error: Using $this when not in object context in LINE 6
Как исправить эту ошибку ?!
Как и ошибка, вы не можете использовать $this
вне определения класса. Чтобы использовать $_db
вне определения класса, сначала сделайте его public
а не private
:
public $_db
Затем используйте этот код:
$authDb = new AuthDb(); $authDb->_db->prepare($query); // rest of code is the same
–
Вы должны понимать, что $this
означает. При использовании внутри определения класса $this
используется для ссылки на объект этого класса. Поэтому, если у вас есть функция foo
внутри AuthDB
, и вам нужно было получить доступ к $_db
из foo
, вы бы использовали $this
чтобы сообщить PHP, что хотите $_db
от того же объекта, к которому принадлежит foo
.
Возможно, вы захотите прочитать этот вопрос StackOverflow: PHP: self vs $ this