【问题标题】:Function parameters convention函数参数约定
【发布时间】:2013-10-24 13:28:04
【问题描述】:

如果我有一个有几十个参数的函数,可以使用变量名作为指导吗?

例如:

public function addUser($user,$employeeno,$streetno,$street,$city,$state,
        $zip,$mobileno,$officeno,$email,$password,$division,$something,
        $something_else,$another_thing,$one_more) {

}

要添加用户,如果我这样做会不会有问题:

.... addUser($user = 'hello', $empno = '123456', $streetno = '123',
             $street = 'Stack Overflow Avenue', $city = 'Stack City',
             $state = 'SC', $zip = 99999, $mob = '1234567890' // ... and so on

我试过了,但效果很好,但是有什么我应该知道的含义吗?在我 5 年多的 PHP 经验中,我从未在其他人开发的示例代码和系统中遇到过这种情况.如果它是可靠的,这将允许我跟踪我正在传递函数或方法的信息。

【问题讨论】:

    标签: php function variable-assignment


    【解决方案1】:

    没问题,你当然可以有尽可能多的参数。当然,正确命名它们会让您的生活更轻松。

    当您忘记命令,或者更糟糕的是想要修改它时,麻烦就会出现 - 它会变得难以维护,因为您需要在使用该功能的任何地方进行更改。

    但是,您可以创建一个 User 类:

    class User
    {
      protected $username;
    
      protected $employeeNumber;
    
      protected $streetNumber;
    
      public function getUsername();
    
      public function setUsername($username);
    
      public function setEmployeeNumber($number);
    
    }
    

    然后在客户端代码中:

    $user = new User();
    $user->setUsername($user);
    $user->setEmployeeNumber($employeeno);
    //....
    

    然后在register() 函数上输入提示。

    public function register(User $user)
    {
      // Save the users data
    }
    

    最终结果是用户的所有数据都封装在用户类中,因此任何更改都不需要对register 函数进行任何进一步的修改。

    【讨论】:

      【解决方案2】:

      如果你想继续使用函数式编码,你总是可以使用数组。

      $data = array("user" => "hello", "employeeno" => 123456, "streetno" => 123, "street" => "Stack Overflow Avenue"); // etc...
      addUser($data);
      

      或者如果你想要更容易阅读的版本:

      $data['user'] = "hello";
      $data['employeeno'] = 123456;
      $data['streetno'] = 123;
      $data['street'] = "Stack Overflow Avenue";
      addUser($data);
      

      或者清理第一个版本:

      $data = array("user" => "hello", 
      "employeeno" => 123456, 
      "streetno" => 123, 
      "street" => "Stack Overflow Avenue"); // etc...
      addUser($data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多