【问题标题】:Ideas how to pass large amount of parameters to method?想法如何将大量参数传递给方法?
【发布时间】:2015-11-29 12:11:41
【问题描述】:

所以,这肯定不行:

$this->callMe ($x, $y, $color, $method = 'default', $colordeep = '32')

这可能会更好:

$this->callMe (array('x' => $x, 'y' => $y, 'color' => $color))

但是,在这种情况下,我还必须始终查找参数。有没有更好的方法来传递大量参数?

【问题讨论】:

  • 也许把它分成更小的函数??还是子函数??
  • 您可以使用显示参数列表的 IDE
  • 找到答案后,也许你也可以帮助这个人:stackoverflow.com/questions/33981778/call-php-function/…
  • @DarkBee 如果有人只阅读代码?
  • 如果其他人正在阅读您的代码,您的代码应该(在最佳情况下)不言自明。

标签: php


【解决方案1】:

我经常遇到这个问题。尤其是现在只需要三个参数的函数,但随着我继续开发,以后可能需要多达 10 个参数。所以:

function callMe($arguments = []){
    $defaults = ['x'=>1, 'y'=>2, 'awesome'=>true];
    defaultArray($arguments,$defaults);

    if($arguments['awesome'])
        return $arguments['x'] * $arguments['y'];

    return false;
}


function defaultArray(&$arguments = [], $defaults = []){
    if(!empty($defaults))
    foreach($defaults as $index=>$value){
        if(!isset($arguments[$index]))
            $arguments[$index] = $value;
    }
}

这样的事情是我的解决方案。我传递了一个数组,在函数开始时我只声明默认值,然后应用这两个。你可能也可以使用“array_merge”或其他东西,但我喜欢自定义函数,因为最后我将它扩展为还有必填字段、错误消息和响应等。

【讨论】:

  • 为什么不呢?这是一个品味问题。因为我知道我在用它做什么,它只是让它更简单,因为在这种特殊情况下我想要用它做的是修改我正在传递的数组,100% 的时间,只是减少每次我实现它时要编写的代码,如果我要返回它等等。但是,你完全可以将它更改为不引用并只返回数组。我会说,这取决于您的特定需求。
  • 很好的解决方案,但我会提供两个改进。首先,在参数定义中添加一个提示:function callMe(array $arguments = [])。传递字符串或其他内容而不是数组会导致“可捕获的致命错误”。其次,传递参数的检查应该由array_key_exists() 完成,而不是isset()stackoverflow.com/questions/3210935/… 中解释了差异
猜你喜欢
  • 2018-01-31
  • 2014-03-08
  • 2011-07-18
  • 2021-12-13
  • 2012-02-23
  • 2011-07-25
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多