1

所以我正在使用codeigniter。

为了允许代码的可重用性,我的模型中有许多功能可以得到不同的东西。

例如 get_details、get_features、get_products

然后我有一个名为 get_all 的函数,它调用所有这些方法,所以如果我想要我可以全部获取它们,否则我可以单独使用它们。

所以我有我的数据,我把它传递给我的视图。我的视图循环遍历每个机构并在表格行中显示各种数据。

目前我使用 if.. else 语句来辨别一个值是否为空。因此,如果一个机构尚未添加其功能,我会使用:

if(!empty($features['feature1'])){//DO STUFF e.g output 'YES'}

无论如何,我的视图代码并没有变得相当长和复杂,因为基本上对于使用 get_all 返回的每个数组的每个键,如果未设置,我使用 if..else 语句输出“-”。

它有效,只是看起来重复。

我想到的解决方法是简单地设置一个默认数组,默认情况下所有内容都设置为“-”,然后如果数据确实存在,它会被覆盖,但是我只需要编写/启动一个大的默认数组..

所以我的问题不是危及生命的问题,也不是特别难。我只是好奇如何在没有丑陋代码的情况下实现这样的功能。

干杯

4

2 回答 2

1

也许您可以通过将其空值设置为来“调整”控制器中的数组-

$features = array_map(function($value) {
    return empty($value) ? '-' : $value;
}, $features);
于 2012-12-04T18:34:15.050 回答
0

如果没有您发布您的实际代码,我只能提供一些一般性建议。为了通常处理这个问题,并合并您的代码以删除所有条件,请将键放在一个数组中。

$keys_to_check = array('feature1', 'feature2', 'etc.....');

foreach ($keys_to_check as $key) {
  if (!empty($features[$key])) {
   // do something
  }    
}

这会将所有这些条件语句重构为更易于维护的东西。

同样在您的模型代码中,当您提供get_all调用 3 个子函数的通用函数时,确保不执行不必要的查询非常重要。似乎最好的软件设计是不要重复自己,并将 3 个函数分组为 1 个,但如果这三个函数都执行相似的查询,那么性能会很糟糕。

于 2012-12-04T18:01:35.193 回答