вот мой файл DB:
<?php
class DB {
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
private function __construct() {
try {
$this->_pdo = new PDO('mysql:host='.config::get('mysql/host').';dbname='.config::get('mysql/db'), config::get('mysql/username'), config::get('mysql/password'));
} catch(PDOExeption $e) {
die($e->getMessage());
}
}
public static function getInstance() {
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x=1;
if(count($params)) {
foreach($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
public function results() {
return $this->_results;
}
public function first() {
return $this->results()[0];
}
public function error() {
return $this->_error;
}
public function count() {
return $this->_count;
}
}
?>
и мой файл пользователя:
<?php
class User {
private $_db,
$_data,
$_sessionName,
$_cookieName,
$_isLoggedIn;
public function __construct($user = null) {
$this->_db = DB::getInstance();
$this->_sessionName = Config::get('session/session_name');
$this->_cookieName = Config::get('remember/cookie_name');
if (!$user) {
if (Session::exists($this->_sessionName)) {
$user = Session::get($this->_sessionName);
if ($this->find($user)) {
$this->_isLoggedIn = true;
} else {
//process logout
}
}
} else {
$this->find($user);
}
}
//this is the function, where it gives me the error
public function hasPermission($key) {
$group = $this->_db->get('groups', array('id', ' = ', $this->data()->group));
print_r($group->first()); // <--- on this line
}
public function exists() {
return (!empty($this->_data)) ? true : false;
}
}
?>
ошибка исходит из метода hasPermission().
как я вижу, похоже, что он не возвращает объект из базы данных, но в файле DB он четко указывает в методе query(), что он должен возвращаться как PDO :: FETCH_OBJ
PS: если обрезать много кода, что не важно в этой проблеме, не стесняйтесь спрашивать больше кода.
Это именно то, о чем говорится в сообщении об ошибке. Включение переменной - это не объект, который вы хотите использовать в качестве объекта.
Один из них не будет объектом.
function hasPermission($key) {
echo 'DB <br />';
var_dump($this->_db);
echo 'Data<br />';
var_dump($this->$this->data());
//Debug, is this successfull!
$group = $this->_db->get('groups', array('id', ' = ', $this->data()->group));
echo 'group<br />';
var_dump($group); //<!-- This will be not an object
print_r($group->first()); // <--- on this line
}
Покажите нам метод $this->data()
.
$this->_db->get()
. Во всяком случае, вам просто нужно выбросить, где проблема. Если вы нашли, вернитесь в этот метод и дамп там. Отладка построчно, или используйте IDE для отладки.
$group
НЕ является объектом, например, ваш вызов БД, вероятно, не удался и вернул логическое значение false.var_dump($group)
в точке возникновения ошибки покажет вам, что это за переменная.get()