Member 13995628 Ответов: 1

Почему переменная возвращает логическое значение false вместо object?


Привет. Я новичок в php oop, и у меня есть вопрос.

У меня есть этот метод в моем классе:

public function find($user = null) {
		if ($user) {
			$field = (is_numeric($user)) ? 'id' :'username';
			$data = $this->_db->get('users', array($field, '=', $user));
			//var_dump($data);
			//die();

			if ($data->count()) {
				
				$this->_data = $data->first();
				return true;
			}
		}
		return false;
	}


Когда я вызываю функцию класса count() Я получил сообщение:
Вызов функции-члена count() на не-объекте


And here is my DB class methods:


public function action($action, $table, $where = array()) {
		if (count($where) === 3) {
			$operators = array('=', '<', '>', '<=', '>=');

			$field    = $where[0];
			$operator = $where[1];
			$value    = $where[2];

			if (in_array($operator, $operators)) {
				$sql = "{$action} FROM {$table} WHERE {field} {$operator} ?";

				if (!$this->query($sql, array($value))->error()) {
					return $this;
				}
			}
		}

		return false;
	}

	public function get($table, $where) {
		return $this->action('SELECT *', $table, $where);
	}

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;
	}


Что я уже пробовал:

Я понимаю, что $data - это не объект:
var_dump($data); возвращает логическое значение false????

Leo Chapiro

Может быть, ваш выбор не возвращает никаких результатов?

Member 13995628

Нет, он возвращает логическое значение false, и таблица БД не пуста :/

1 Ответов

Рейтинг:
1

MadMyche

Скорее всего, ваш вызов БД возвращает пустой набор; и вы не проверяете наличие НУЛЕВОЙ.
Если это так, то простое решение состоит в том, чтобы бросить НУЛЕВОЙ встроенный в существующий оператор IF:

if ( $data && $data->count()) {
    $this->_data = $data->first();
    return true;
}


Member 13995628

Я пробовал это раньше, и хорошо, что это больше не показывает мне ошибку, но ничего не происходит после того, как я нажимаю войти, что я здесь упускаю :/
способ входа в систему:

public function login($username = null, $password = null) {

		$user = $this->find($username);
		
		if ($user) {
			if ($this->data()->password === Hash::make($password, $this->data()->salt)) {
				Session::put($this->_sessionName, $this->data()->id);
				return true;
			}
		}
		return false;
	}

	public function data() {
		return $this->_data;
	}