代码之家  ›  专栏  ›  技术社区  ›  Naveed

当要发送的值很多时,将值传递给函数的最佳方法是什么?

  •  3
  • Naveed  · 技术社区  · 14 年前

    当您必须将许多值传递给函数并且其中一些值可能是可选的时,定义方法签名的最佳方法是什么。在将来,我可能需要传递更多的变量或者减去一些传递给函数的值。

    例如:

    function addInfo( $name, $dob, $phone='', $address='' ) {
           // Store data
    }
    
    addInfo( 'username', '01-01-2000', '1111111' ); // address is not given
    

    或者

    function addInfo( $info ) {
        // Store data
    }
    
    $info = array( 'name'=>'username', 
                   'dob'=>'01-01-2000', 
                   'phone'=>'1111111', 
                   'address'=>'' );
    addInfo( $info );
    
    4 回复  |  直到 14 年前
        1
  •  3
  •   Kel    14 年前

    还有一种类似OOP的方法:用字段“name”、“dob”、“phone”、“address”创建参数对象(例如person)(这在Fowler的“refactoring”一书中称为引入参数对象重构)。 在您的例子中似乎是合适的,因为您传递给函数的所有字段实际上都与一个对象相关。

        2
  •  4
  •   rkg    14 年前

    Clean Code ,您应该将参数atmost的数量限制为2-3,以使代码易于理解。因此,最好将它们包装到一个对象中,并将对象作为参数传递。这绝对更可取。

        3
  •  1
  •   Vasilis Lourdas    14 年前

    尽管函数的第二个版本

    总之,我将使用第一个版本或类对象方式。

        4
  •  0
  •   Manoj Govindan    14 年前

    我更喜欢第一个版本,因为它更明确,因此更程序员友好。程序员一眼就能看出函数的期望值。

    我不知道要评论的性能影响。我怀疑如果有的话,处罚不会很重。