方法为什么没有返回?

时间:2015-12-15 20:44:40

标签: php mysql pdo

如果我创建一个新用户,那么就说我有:

$user = new User(10);

根据我的user.php类,它应该取这个数字并找到id为10的用户并存储其数据。所以当我输入:

$user->data();

我应该让第一个用户获得id为10的数据,但出于某种原因我输入$user->data()时没有任何反应。

这是班级。

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

  public function update($fields = array(), $chosenfield = 'id', $id= null) {

    if(!$id && $this->isLoggedIn()) {
      $id = $this->data()->id;
    }

    if(!$this->_db->update('users', $chosenfield, $id, $fields)) {
      throw new Exception('There was a problem updating.');
    }
  }

  public function create($table,$fields = array()){
    if(!$this->_db->insert($table, $fields)){
      throw new Exception('There was a problem creating an account.');
    }
  }


  public function find($user = null) {
    if($user){
      $field = (is_numeric($user)) ? 'id' : 'username';
      $data = $this->_db->get('users', array($field, '=', $user));
      if($data->count()) {
        $this->_data = $data->first();
        return true;
      }
    }
    return false;
  }


  public function login($username = null, $password = null, $remember = false) {
    if(!$username && !$password && $this->exists() === 'true') {
      Session::put($this->_sessionName, $this->data()->id);
      } else {
      $user = $this->find($username);
      if($user){
        if($this->data()->password === Hash::make($password, $this->data()->salt)) {
          Session::put($this->_sessionName, $this->data()->id);

          if($remember){
            $hash = Hash::unique();
            $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));

            if(!$hashCheck->count()) {
              $this->_db->insert('users_session',array(
                'user_id' => $this->data()->id,
                'hash' => $hash
              ));
            } else {
              $hash = $hashCheck->first()->hash;
            }

            Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
          }
          return true;
        }
      }
    }
    return false;
  }


  public function hasPermission($key) {
    $group = $this->_db->get('groups', array('id', '=', $this->data()->group));

    if($group->count()) {
      $permissions = json_decode($group->first()->permissions, true);

      if($permissions[$key] == true){
        return true;
      }
    }
    return false;
   }

  public function exists() {
    return (!empty($this->_data)) ? true : false;
  }


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


  public function isLoggedIn(){
    return $this->_isLoggedIn;
  }


  public function logout(){

    $this->_db->delete('users_session', array('user_id' ,'=' , $this->data()->id));

    Session::delete($this->_sessionName);
    Cookie::delete($this->_cookieName);
  }
}

1 个答案:

答案 0 :(得分:1)

我之前误解了代码,问题正是m_ulder在评论中所说的。

当你这样说时:

new User(10);

在构造函数中,此语句为false

if (!$user)

并且其中的代码永远不会执行,这是全部函数内部的代码。

这是因为当$ user为10时,$user为TRUE - 或任何其他值。