是否可以在函数调用中省略随机参数?

时间:2013-01-02 10:04:35

标签: php

  

可能重复:
  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让它工作?

7 个答案:

答案 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"); ?>

就像提醒一样,您正在访问实例方法,就好像它是类/静态方法一样。你可能想改变它。