1

这是我在这里的第一个问题,我会尽可能地澄清它。

我是一个初学者,我正在学习 lynda——当我进入这部分时,我已经学习了 PHP MySQL 课程。

代码工作得很好,我只需要对代码中注释的行进行更好的解释。

require_once('database.php');

class User {

  public $id;
  public $username;
  public $password;
  public $first_name;
  public $last_name;

  public static function find_all() {
    return self::find_by_sql("SELECT * FROM users");
  }

    /////

    public static function find_by_sql($sql="") {

    global $database;
  $result_set = $database->query($sql);
  $user_array = array();
  while ($row = $database->fetch_array($result_set)) {
    $user_array[] = self::instantiate($row);
    }
    return $user_array;
  }

最后是我几乎明白的台词:)

private static function instantiate($row) {
    $user = new self; 

    foreach($row as $attribute=>$value){ 
      if($user->has_attribute($attribute)) { 
        $user->$attribute = $value;          /// THIS LINE BUGS ME
      }
    }
    return $user;

  }

  private function has_attribute($attribute) {

    $user_vars = get_object_vars($this); 
    return array_key_exists($attribute, $user_vars);
  }
}

所以我想我不明白array_key_exists哪个返回 TRUE 或 FALSE,在我的情况下它是真的,但是线$users->$attributes =$value ;对我来说没有意义,

所以,我检查是否从对象中获取数组 MATCH 变量名的键,

if($user->has_attribute($attribute)) { //and then this is true,perform nxt line
    $user->$attribute = $value;      // i got match of attribute above,how does it put values in $user_vars???

我知道它说类似“如果用户具有与该 fetch 数组中的键相同的属性然后放入该属性 $value 的相同属性值但我只是不知道当我从未返回对象变量时它是如何完成的

感谢您的时间 !

编辑:类变量名称等于数据库中 column_names 的名称

4

1 回答 1

0

该类User具有公共属性$id$username$password等。这意味着您可以按以下形式为属性分配值:

$u = new User;
$u->id = 123;
$u->username = 'username';

并使用动态属性名称:

$prop = 'id';
$u->$prop = 123;

$prop = 'username';
$u->$prop = 'username';

这只是您不理解的行中发生的事情:

if ($user->has_attribute($attribute)) {
    $user->$attribute = $value;

该方法使用函数获取对象的has_attribute所有属性。后者将对象属性作为数组获取:$userget_object_vars

$user_vars = get_object_vars($this);
/* i.e.
$user_vars = array (
  'id' => ...,
  'username' => ...,
  ...
);
*/

然后该has_attribute方法检查给定的$attribute键是否存在于属性数组中:

return array_key_exists($attribute, $user_vars);

如果存在 ( true),则将该$attribute属性分配给$value

于 2016-12-16T11:03:46.557 回答