好的,所以我正在慢慢地从Procedural迁移到OOP,除了一件事,我发现这一切都很直接。
我曾经使用这种方法从一个简单的双栏设置表中提取我的设置数据,该表包含每个设置的一行,用'setting'和'value'字段定义:
$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;
的形式使用它,它将回显来自行的VALUE setting
等于'setting_name'..
所以基本上如果我的设置表中有一行setting
是'site_url'且value
是'http://example.com/',我想要$ setting-> site_url;包含'http://example.com/'..或者具有同样效果的东西..
任何人都可以帮助我吗?我现在正在砖墙上..可能是一些非常愚蠢的东西,我忽略了......
答案 0 :(得分: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;
}