【问题标题】:I'm passing too many parameters我传递了太多参数
【发布时间】:2014-05-17 13:54:32
【问题描述】:

我在函数中传递了很多参数

我想知道我在做什么是否有问题,是否可以将所有这些变量放入一个数组中并调用该数组:

这里是我的函数参数:

function addjo($logo, $job_category, $job_name, $status, $localization, $job_type, $contract_type, $description)

我的代码可以识别所有变量。

  if (isset($_POST['add_jo'])){

         $job_category  =$_POST['job_category'];
         $description  = $_POST['description'];
         $job_name  = $_POST['job_name'];
         $logo  = $_POST['logo'];    
         $status  = $_POST['status'];
         $localization  = $_POST['localization'];
         $job_type  = $_POST['job_type'];
         $contract_type  = $_POST['contract_type'];

         addjo($logo, $job_category, $job_name, $status, $localization, $job_type, $contract_type, $description);

         }else{


         $logo = NULL;
         $job_category = NULL;
         $job_name = NULL;
         $status = NULL;
         $localization = NULL;
         $description = NULL;
         $job_type = NULL;
         $contract_type = NULL;
         $check1 = NULL;
         $check2 = NULL;

         }

有可能做这样的事情吗?

if(isset($_POST['mybutton'])){

array[](
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
);

function(callarrayhere);

else{

$var1 = null;
$var2 = null;

}

谢谢。

【问题讨论】:

  • 是的,这里可以使用数组。

标签: php function parameters


【解决方案1】:

既然$_POST已经是一个数组,就用它吧:

addjob($_POST);

addjob:

function addjob($input) {
    // verify that array items are present and correct.
}

将数组的值导出到单个变量不仅浪费时间和内存,而且还使您的代码更难阅读(这些变量来自哪里?它们来自同一个源数组并不明显)

【讨论】:

  • 我建议先验证/清理 POST 数据,然后再将其用于可能不清楚这是用户提供的输入的函数中。
  • @MikeBrant 很公平,但我个人更愿意在您知道数据在您的控制下用于任何目的时立即验证数据 - 根据数据的去向,可能会以不同的方式验证相同的输入,但如果我在 addjob 中,那么我确切地知道需要做什么。
【解决方案2】:

当然可以:

 if (isset($_POST['add_jo'])){
         $a = array();   
         $a['job_category']  =$_POST['job_category'];
         $a['description']  = $_POST['description'];
         // and so on   
         $a['contract_type']  = $_POST['contract_type'];    
         addjo($a);

    } 
    else
    {
          $a['job_category'] = null;
         // and  so on    
    }

在函数 addjo 中,您可以通过这种方式显示所有值:

function addjo($a) {
   foreach ($a as $k => $v) {
      echo $k.' '.$v."<br />"
   }

   // or
   echo $a['job_category'];
}

【讨论】:

    【解决方案3】:

    是的,可以将数组作为函数的参数。你的语法不太正确。这样就可以了:

    function addjo($params){
        echo $params['logo'];
        echo $params['job_category'];
        echo $params['job_name'];
    }
    

    使用示例:

    $arr = array(
        'logo' => $logo,
        'job_category' => $job_category,
        'job_name' => $job_name
    );
    
    addjo($arr);
    

    您还可以为每个数组元素设置默认参数,或者将它们设为可选。 See this answer 了解如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      相关资源
      最近更新 更多