Неустранимая ошибка: вызов функции-члена first () для необъекта в C: \ wamp \ www \ it-fix.nu \ login \ classes \ user.php в строке 98

0

вот мой файл 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: если обрезать много кода, что не важно в этой проблеме, не стесняйтесь спрашивать больше кода.

  • 1
    Ошибка ясна: «на необъекте». $group НЕ является объектом, например, ваш вызов БД, вероятно, не удался и вернул логическое значение false. var_dump($group) в точке возникновения ошибки покажет вам, что это за переменная.
  • 0
    Где реализация get()
Показать ещё 1 комментарий
Теги:
pdo

1 ответ

0
Лучший ответ

Это именно то, о чем говорится в сообщении об ошибке. Включение переменной - это не объект, который вы хотите использовать в качестве объекта.

Один из них не будет объектом.

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().

  • 0
    извините, я имел в виду $this->_db->get() . Во всяком случае, вам просто нужно выбросить, где проблема. Если вы нашли, вернитесь в этот метод и дамп там. Отладка построчно, или используйте IDE для отладки.
  • 0
    public function data () {return $ this -> _ data; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню