【问题标题】:Arrays vs Single vars数组与单个变量
【发布时间】:2010-12-30 18:56:17
【问题描述】:

我最近遇到了一个 PHP 设计问题。我注意到在函数中,您可以将数组作为参数传递。一开始没注意到这东西的厉害,现在迷上了数组。

例如,在我的模板类中,我必须将一些变量和一些 mysqli_results 传递到模板文件中(就像 phpbb 一样)。我想知道以下哪种可能性是最好的。

# 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);

或者如果有更好的东西。我什至在考虑创建一个执行如下查询的数据库类:

$result = $db->fastQuery(array(
        'select' => 'user-name',
        'from' => $table,
        'where' => array('user-id' => 123, 'user-image' => 'none'),
        'fetch' => true
    ));

天哪,我真的很着迷。

【问题讨论】:

  • 你对数组很着迷吗?然后你会 chaining.
  • 这是否意味着他们都是很好的例子?
  • @Mike B,略有不同。
  • 我没有说这是骗子,只是引用了类似的讨论:)

标签: php design-patterns


【解决方案1】:

如果由我决定,我会选择#1,我不喜欢仅在必要时嵌套对象和数组。通过这样做,我保持我的代码简单。 如果你追随你的痴迷,你最终可能会写出一个完整的 ORM。

【讨论】:

  • 抱歉,什么是“完整的 ORM”?我用谷歌搜索它,它让我进入了 2 条不同的编程路径。
  • “计算机软件中的对象关系映射(ORM、O/RM 和 O/R 映射)是一种编程技术,用于在面向对象编程语言中的不兼容类型系统之间转换数据。”维基百科。通常 ORM 确实会将 sql 数据转换为对象,并且无需太多代码即可负责 sql 关系
【解决方案2】:

#4

允许两者:

function assign($name, $val = null)
{
    if (is_array($name)) {
        // loop through and assign
    } else {
        // assign single var
    }
}

这类似于您在 C++/Java 中看到的重载技术。

您也可以通过在构造函数中调用assign 来允许#1。在 OOP 编程中,让构造函数允许设置属性的快捷方式并不少见,这些属性也可以在其他方法中设置。

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 2014-08-10
    • 2015-12-24
    • 2023-03-04
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多