Codeigniter可重用方法

时间:2018-03-20 01:17:22

标签: php codeigniter methods

我误解了什么吗?

我说下面有模型方法:

public function product($user_id,$action){
 $this->db->select('product_id');
 $this->db->from('products');
 $this->db->where('user_id', $user_id);
 $query = $this->db->get();

 $counter = 0;
 switch($action){

 case 'ids':
  foreach($query->result() as $row){
  data['ids'][$counter] =  $row->product_id;}
  return $data;
 break;

 case 'count':
 return $query->num_rows();
 break;
}
}

以上是否被视为可重复使用的方法,因为我可以将其用于2个目的?

或者不是,将它们分成两个单一的方法更好吗?

可重用的方法更像是这样:

public function get_id($table,$value){
 $id = $table.'_id';
 $query = $this->db->get_where($table, array($id => $value));
}

我为我的表和PK(ID)使用简单的名称。例如,'用户'表格会有' user_id'。 '产品'表格会有' product_id'

1 个答案:

答案 0 :(得分:0)

说实话,我从来没有听说过一种被称为可重复使用的方法。我听说过类(CI上下文:模型和库),但从来没有听说过特定的方法。通常,可重用的东西的标志是依赖关系被管理并阻止tight coupling 。对于CI中的类很难做,也可能依赖于您的代码结构,因为CI应用程序往往具有内在紧密耦合。

我可以告诉你的是,从方法到课程的良好代码的标志是原则分离。对用户执行CRUD操作的类不应该处理诸如登录用户之类的auth函数 - 两者可以交互但不应该在一起。通过扩展,方法不应该尝试做太多。在您的情况下,您不仅通过使用switch语句使代码更加冗长,而且通过使用相同的方法处理两个不同且不同的操作,使得维护代码变得更加困难。

这样的代码也可能是一个问题:

public function get_id($table,$value){
 $id = $table.'_id';
 $query = $this->db->get_where($table, array($id => $value));
}

因为如果您决定将一个表更改为最后没有_id,那么您必须(1)仅为该表引入新函数(2)删除_id标记并使用此方法更新每个项目的参数$table。为什么不直接传递$table名称并放弃这一额外步骤?

所以在我看来,尽管只要管理依赖关系,所有方法都是可重用的,但是应该考虑其他编码实践。引入新方法无需任何费用。

相关问题