我有一个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
?
答案 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');