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には「datagrid」の代わりに「Answers」がありますが$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

パラメータの受け渡しは、関数で宣言されている順序を取ります。デフォルトとしてどちらをエスケープするかはわかりません。

デフォルトの引数は、LEFTからRIGHTにオーバーライドされます。

'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"することにより、変数値を割り当て、関数の3番目の引数として文字列「Answers」を渡します。

于 2013-01-02T10:06:46.123 に答える
0

そのクラスパラメータに空の値を渡すと、デフォルトの値としてdatagridとして値を取得することで機能します

::を使用して直接呼び出すには、関数をSTATICとして宣言する必要があります。

したがって、宣言は次のようになります。

public static function table_creator($thread, $table_body, $class='datagrid', $caption=null){
     some code
}

次に、値を割り当てて3番目のパラメーターを渡すのはなぜですか。

以下のコードをから変更します

<?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

宣言には4つのパラメーターがあり、3つだけを渡します。4番目のパラメーターのデフォルト値をオーバーライドする場合は、3番目のパラメーターも明示的に渡す必要があります。

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。簡単に言うと、パラメータが一致していることを確認してください。1つのパラメーターをスキップする場合はnull、宣言されたデフォルト値が使用されるように使用します。

したがって、次のような方法で問題を解決できます。

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

補足として、クラス/静的メソッドであるかのようにインスタンスメソッドにアクセスしています。あなたはそれを変えたいかもしれません。

于 2013-01-02T10:13:51.137 に答える