这是我在这里的第一个问题,我会尽可能地澄清它。
我是一个初学者,我正在学习 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 的名称