可能重复:
Any way to specify optional parameter values in PHP?
How would I skip optional arguments in a function call?
我有这个声明:
public function table_creator($thread, $table_body, $class='datagrid', $caption=null){
some code
}
当我执行它时:
<?php echo SomeClass::table_creator($this->report_keys, $report, $caption="Answers"); ?>
在变量$class
中存在“数据网格”的“答案”,有没有办法不通过$class
让它工作?
答案 0 :(得分:2)
PHP没有命名参数(或关键字参数)。我建议你尝试以下风格:
public function table_creator($thread, $table_body, $options=array()){
$default_options = array(
"class" => "datagrid",
// you can add more default options here
);
$options = array_merge($default_options, $options);
// some code
}
然后你可以这样称呼它:
echo SomeClass::table_creator($this->report_keys, $report,
array("caption" => "Answers");
答案 1 :(得分:1)
参数传递采用在函数中声明它们的顺序。它不会知道默认哪个逃脱。
默认参数将被重写为LEFT to RIGHT。
如果您清楚知道'datagrid'
将是$class
的价值,为什么不这样传递它?
<?php
echo SomeClass::table_creator($this->report_keys, $report,'datagrid',$caption='Answers');
?>
答案 2 :(得分:0)
PHP无法以这种方式工作,您需要更改$class
和$caption
参数的顺序才能使用该工具。通过在函数调用中使用$caption="Answers"
,您将分配一个变量值并传递一个字符串&#34; Answers&#34;作为该函数的第三个参数。
答案 3 :(得分:0)
如果您为该类参数传递空值,则将该值设为 datagrid 作为默认值
您必须将函数声明为STATIC才能使用 ::
直接调用声明应该是,
public static function table_creator($thread, $table_body, $class='datagrid', $caption=null){
some code
}
然后,为什么要通过赋值
来传递第三个参数从
更改以下代码<?php echo SomeClass::table_creator($this->report_keys, $report, $caption="Answers"); ?>
要
<?php echo SomeClass::table_creator($this->report_keys, $report, "Answers"); ?>
OR
<?php echo SomeClass::table_creator($this->report_keys, $report); ?>
答案 4 :(得分:0)
声明有四个参数,你只传递三个。如果要覆盖第四个参数的默认值,则还必须显式传递第三个参数:
echo SomeClass::table_creator($this->report_keys, $report, 'datagrid', "Answers"); ?>
您现在使用的方法在PHP中不起作用,尽管它可以在其他一些语言中使用。
如果您经常需要这样做,您可以创建一个功能来为您完成:
function createTableDataGrid($keys, $report, $caption)
{
echo table_creator($keys, $report, 'datagrid', $caption); ?>
}
如果您的类是您的编辑,您可以在类的额外方法而不是单独的函数中执行此操作。
答案 5 :(得分:0)
而不是$ caption =“Answers”使用此代码来调用成员函数
$字幕= “答案” echo SomeClass :: table_creator($ this-&gt; report_keys,$ report,$ caption); ?&GT;
答案 6 :(得分:0)
在PHP中,函数按照声明的顺序接收参数。 因此,如果你的函数接收到4个参数并且你只传递3个参数,那么最后一个参数什么都没有。
另外,仅仅因为您使用$caption="Answers"
并不意味着被调用函数会将其接收到$caption
参数中。
长话短说,确保参数匹配。如果要跳过一个参数,请使用null
,以便使用声明的默认值。
所以你可以用这样的东西来解决你的问题:
<?php
echo SomeClass::table_creator($this->report_keys,
$report,
null,
$caption="Answers"); ?>
就像提醒一样,您正在访问实例方法,就好像它是类/静态方法一样。你可能想改变它。