我最近遇到了PHP的设计问题。我注意到在函数中你可以作为参数传递一个数组。我没有先注意到这个东西的强大功能,但现在我对数组很着迷。
例如,在我的模板类中,我必须将一些变量和一些mysqli_results传递到模板文件中(如phpbb do)。我想知道以下哪种可能性最好。
# 1
$tpl = new template(array(
'vars' = array('var1' => 'val1', 'var2' => 'val2'),
'loops' = array('loop1' => $result1, 'loop2' => $result2)
));
# 2
$tpl = new template;
$tpl->assignVars(array(
'var1' => 'val1',
'var2' => 'val2'
));
$tpl->assignloops(array(
'loop1' => $result1,
'loop2' => $result2
));
# 3
$tpl = new template;
$tpl->assignVar('var1', 'val1');
$tpl->assignVar('var1', 'val1');
$tpl->assignLoop('loop1', $result1);
$tpl->assignLoop('loop2', $result2);
或者如果有更好的东西。我甚至考虑创建一个执行查询的db类,如下所示:
$result = $db->fastQuery(array(
'select' => 'user-name',
'from' => $table,
'where' => array('user-id' => 123, 'user-image' => 'none'),
'fetch' => true
));
天啊,我真的很痴迷。
答案 0 :(得分:1)
<强>#4 强>
允许两者:
function assign($name, $val = null)
{
if (is_array($name)) {
// loop through and assign
} else {
// assign single var
}
}
这类似于您在C ++ / Java中看到的重载技术。
您也可以通过在构造函数中调用assign
来允许#1。在OOP编程中,让构造函数允许设置可以在其他方法中设置的属性的快捷方式并不罕见。
答案 1 :(得分:1)
如果由我决定,我会选择#1,我不喜欢只在必要时嵌套对象和数组。通过这样做,我保持我的代码简单。 如果你追随你的痴迷,你最终可能会写完整的ORM。