比如有一个短消息类
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//第一种写法
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class msg{
  private $uid;
  public function set_uid($uid){
    $this->uid=$uid;
  }  public function get_read_count(){
     //返回已读数量
  }  public function get_no_read_count(){
     //返回未读数量
  }  public function get_delete_count(){
     //返回删除数量
  }
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//第二种写法
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class msg{
  private $uid;
  public function set_uid($uid){
    $this->uid=$uid;
  }  public function get_count($type){
        switch ($type) {
            case 1:
                return 已读数量;
                break;
            case 2:
                return 未读数量;
                break;
            case 3:
                return 删除数量;
                break;
            default:
                return 0;
        }
  }}

解决方案 »

  1.   

    第一种快一点吧,同样调用一次函数,第二种还要判断,虽然switch效率很高
      

  2.   

    效率不体现在这些代码的执行上,而在于你怎么用的上面理论上1比较符合对象的概念
    2是把3种性质结合到一起成为一个“集合”,减少api的接口
      

  3.   

    推荐第一种,不是因为效率的问题,而是第二种是所谓的硬编码。1、第一种扩展灵活,第二种如果你要加上一个总数量的话,你必须修改switch分支!
    2、继承灵活,当有一个继承msg类的子类想修改“已读数量”和“未读数量”时,它也必须完全实现get_count的硬编码结构(无论是if还是switch),否则父类为统一count而作的get_count就没有意义了
      

  4.   

    当然第一种了,这种情况不需要用到 switch 来判断了。