gpt4 book ai didi

php - 澄清一行——> 将 sql 数据设置为对象变量

转载 作者:行者123 更新时间:2023-11-30 22:07:23 25 4
gpt4 key购买 nike

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

我是初学者,我正在学习 lynda - 超出 PHP MySQL 类(class),当我到达这部分时。

代码运行良好,我只是需要对代码中注释的那一行进行更好的解释。

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,在我的例子中它是 true,但是 $users->$attributes =$value ; 对我来说没有意义,

因此,我检查获取数组中的键是否匹配对象中的变量名,

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???

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

感谢您的宝贵时间!

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

最佳答案

User 类具有公共(public)属性$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 方法使用 get_object_vars 函数获取 $user 对象的所有属性。后者将对象属性作为数组获取:

$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

关于php - 澄清一行——> 将 sql 数据设置为对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41182786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com