1

可能重复:
有什么方法可以在 PHP 中指定可选参数值?
如何在函数调用中跳过可选参数?

我有这个声明:

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让它工作?

4

7 回答 7

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");
于 2013-01-02T10:13:39.350 回答
1

参数传递采用它们在函数中声明的顺序。它不知道默认逃逸哪个。

默认参数将被从左到右覆盖。

如果你很清楚这'datagrid'将是 的值$class,为什么不这样传递呢?

<?php 
 echo SomeClass::table_creator($this->report_keys, $report,'datagrid',$caption='Answers');
?>
于 2013-01-02T10:13:33.960 回答
0

PHP 不是这样工作的,您需要更改$class$caption参数的顺序才能使该用法起作用。通过$caption="Answers"在函数调用中使用,您将分配一个变量值并将字符串“Answers”作为函数的第三个参数传递。

于 2013-01-02T10:06:46.123 回答
0

如果您为该类参数传递空值,它将通过将该值作为数据网格作为默认值来工作

您必须将函数声明为 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"); ?>

或者

<?php echo SomeClass::table_creator($this->report_keys, $report); ?>
于 2013-01-02T10:07:07.950 回答
0

声明有四个参数,你只传递了三个。如果要覆盖第四个参数的默认值,则还必须显式传递第三个参数:

echo SomeClass::table_creator($this->report_keys, $report, 'datagrid', "Answers"); ?>

您现在使用的方法在 PHP 中不起作用,尽管它在其他一些语言中起作用。

如果您需要经常执行此操作,您可以创建一个函数来为您执行此操作:

function createTableDataGrid($keys, $report, $caption)
{
  echo table_creator($keys, $report, 'datagrid', $caption); ?>
}

如果该类是您要编辑的,则可以在该类的额外方法中而不是单独的函数中执行此操作。

于 2013-01-02T10:07:18.147 回答
0

而不是 $caption="Answers" 使用此代码调用成员函数

$caption="Answers" echo SomeClass::table_creator($this->report_keys, $report, $caption); ?>

于 2013-01-02T10:08:02.383 回答
0

在 PHP 中,函数接收参数的顺序与声明的顺序相同。因此,如果您的函数接收 4 个参数而您只传递了 3 个参数,那么最后一个参数将一无所获。

同样,仅仅因为您使用$caption="Answers"并不意味着被调用的函数会将其接收到其$caption参数中。长话短说,确保参数匹配。如果您想跳过一个参数使用null,以便使用声明的默认值。

因此,您可以通过以下方式解决您的问题:

<?php
echo SomeClass::table_creator($this->report_keys, 
                              $report, 
                              null,
                              $caption="Answers"); ?>

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

于 2013-01-02T10:13:51.137 回答