0

好的,所以我正在慢慢地从 Procedural 迁移到 OOP,除了一件事之外,我发现这一切都非常简单。

我曾经使用这种方法从一个简单的两列设置表中提取我的设置数据,该表包含每个设置的一行,用“设置”和“值”字段定义:

$query = mysql_query("SELECT * FROM `settings`");
while ($current_setting = mysql_fetch_array($query)) {
    $setting[$current_setting['setting']] = $current_setting['value'];
}

如您所见,我对其进行了操作,以便可以简单地使用 $setting['any_setting_name'] 在该设置的行中显示相应的“值”。我不确定这是否是一种愚蠢的做事方式,但无论如何,我都会继续前进..

但是,自从转向面向对象的 PHP 之后,我真的不知道如何做类似的事情。

$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
    echo $current_setting->setting; // echo's each setting name
    echo $current_setting->value; // echo's each setting value
}

如您所见,我完全能够检索数据,但我想要的是以后能够以以下形式使用它:$setting->setting_name;这将从setting等于 'setting_name' 的行中回显 VALUE。

所以基本上如果我的设置表中有一行setting是“site_url”并且value是“ http://example.com/ ”,我想要 $setting->site_url; 包含' http://example.com/ '.. 或具有相同效果的东西..

有谁可以帮我离开这里吗?我现在在砖墙上..可能是我忽略了一些非常愚蠢的事情..

4

1 回答 1

0

由于您正在使用资源,因此它有一个指针。一旦你到达终点,你就不能再使用它了。我认为您可以重置它,但为什么不将新旧混合?

我认为你不会有太多的开销,不管怎样,做这样的事情:

$settings = array();
$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
     $settings[$current_setting->setting] = $current_setting->value;
}

现在您可以$settings随心所欲地使用。

更新

还没有测试或使用它,但你想做这样的事情吗?考虑以下伪代码,可能实际上不起作用。

$settings = new stdClass();
$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
     $settings->{$current_setting->setting} = $current_setting->value;
}
于 2013-07-04T23:43:45.010 回答