2017-07-26 86 views
0

我需要一个实用的方法将多个参数传递给一个函数,该函数在多个脚本上全局使用,以从数据库转储表。PHP多参数函数

它接受多个参数(每个参数都有默认值),它取决于脚本是否需要在函数内激活特定的选项。

例如:

function dump_table($sumtotal=false, $countrows=false, $yadalada=false... etc){ 

的问题是,如果我有10个不同的参数和脚本只需要参数10是真实的我必须调用是这样的:

dump_table(false,false,false,false...., true) 

所以。有没有另外一种方法可以轻松扩展而不需要函数调用的开销?

我虽然要使用对象,但afaik它会涉及每个调用创建一个类和实例。

有没有一种方法,使在PHP中像这样(的JavaScript般的风格):

dump_table({opt1: true, opt10: true, opt99: true}) 

甚至

$options = { count: true, sumtotals: true }; 
dump_table($options); 
  • 我会使用类似property_exists到函数内部检查哪些设置...

thx

+0

_if我有10个不同的parameters_这将是错误的做法。你的代码设计会很麻烦。想想单一的责任...... –

+3

一个简单的关联数组... ...? – CBroe

+1

我可能会创建一个类来处理它,而不是一个函数。然后,您可以将设置设置为具有默认值的属性以及参数的设置器和获取器。 –

回答

0

你可以用这样的方法:

function yourFunction(array $parameters = array()) { 
    //here you should define all possible parameters with their defaults 
    $param_1 = true; 
    $param_2 = false; 
    ... 
    $param_10 = true; 
    ... 
    $param_N = 'whatever'; 

    //and now simply extract passed parameters 
    extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS); 
} 

用法:

yourFunction(['param_1' => false, 'param_10' => 'something']); 

extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS)将覆盖默认定义的变量与那些将通过$parameters阵列传递的变量。

+0

omg这是纯粹的魔术!奇迹般有效。谢谢。 –

0

由于@CBroe建议,关联数组可能是你正在寻找的解决方案:

$options = array(
    'count' => true, 
    'sumtotals' => true, 
    'option3' => false, 
    ... 
    'option9' => false 
    ); 
dump_table($options); 
0

我会采取一些默认选项阵列和1个数组作为输入覆盖:

<?php 

function foo($optionsgiven = array()) 
{ 
    $defaultoptions = ['width' => 10, 'height' => 20, 'weight' => 30]; 

    foreach($defaultoption as $key => $value) { 
    if(isset($optionsgiven[$key])) { 
     $options[$key] = $optionsgiven[$key]; 
    } 
    else { 
     $options[$key] = $value; 
    } 

    } 
} 

// main script 
$x = foo(['width' => 100]); 
?> 
0

这绝对是错误的做法。 我建议使用json_encode()和json_decode()对数组进行编码和解码。 您可以将所有属性设置为数组。

$array = array(
    "sumtotal" = false, 
    "countrows" =false, 
    "yadalada" = false 
); 
dump_table(json_encode($array)); 

,你必须该数组json_decode($array, true);解码功能里面,然后你可以建立你的if else statments