使用PHP函数但错过了参数

时间:2014-02-25 13:39:41

标签: php

我有一个PHP函数:

function TicketsDisplay($status, $company = '', $contact = '', $show_status_name = 'no', $StatusColour = '000000', $StatusHeaderFontColour = '#FFFFFF', $FontColour = '#000000' ) {
...
}

我在这里跑:

<?php TicketsDisplay('Customer Reply',$_GET["seq"]); ?>

我想添加

$order = 'datetime DESC';

作为函数的参数,但是如何确保当我添加到最后它不会显示错误,因为其他参数是空白

更新:

如果我的功能如下:

 function TicketsDisplay($status, $company = '', $contact = '', $show_status_name = 'no', $StatusColour = '000000', $StatusHeaderFontColour = '#FFFFFF', $FontColour = '#000000', $order = 'datetime DESC' ) {
    ...
    }

我将我的功能称为:

<?php TicketsDisplay('Customer Reply',$_GET["seq"],'sequence ASC'); ?>

肯定会认为结束参数是$contact

2 个答案:

答案 0 :(得分:6)

不幸的是,PHP没有让你能够做到这样的事情:

TicketsDisplay('Customer Reply',$_GET["seq"], , , , , $order);

坦率地说,谢天谢地,PHP不允许开发人员这样做^^

你实际上必须在两者之间填写每个参数。

更好的方法是在传递这么多参数时使用对象/数组:

所以你的功能最好看起来像这样:

function TicketsDisplay($options = array()) {

    // set defaults
    $defaultOptions = array();
    $defaultOptions['status'] = '';
    $defaultOptions['company'] = '';
    $defaultOptions['contact'] = '';
    $defaultOptions['show_status_name'] = 'no';
    $defaultOptions['StatusColour'] = '#000000';
    $defaultOptions['StatusHeaderFontColour'] = '#FFFFFF';
    $defaultOptions['FontColour'] = '#000000';
    $defaultOptions['order'] = '';

    // merge the arrays and have the $options overwrite any $defaultOptions
    $options = array_merge($defaultOptions, $options);

    // use your parameters like this
    echo $options['FontColour']; // will give you #000000 if you didn't pass in something different

    // as suggested by Nathan Dawson use extract to avoid breaking current compatibility within your function
    extract($options);

    // now you can simply:
    echo $FontColour;

}

<?php

// now call it like this
TicketsDisplay(array('status'=>'Customer Reply', 'company'=>$_GET["seq"], 'order'=>'datetime DESC'));

// the code will let you optionally deviate from the defaults of the function

?>

重要

有一点需要注意的是,参数中使用的命名约定不一致会导致您头疼。

show_status_name vs StatusColour vs company

答案 1 :(得分:-1)

看起来你的函数有足够的参数。而不是寻找一种方法将另一个添加到最后(这非常简单)我建议使用数组而不是默认值并提取以将值作为变量。

回答你的实际问题:

TicketsDisplay('Customer Reply',$_GET["seq"], '', 'no', '000000', '#FFFFFF', '#000000', 'enter order here');