5

おそらくこれはPHPの制限ですが、関数呼び出しでオプションのパラメーターが指定されている場合でも(および== null)、関数を呼び出して、オプションのパラメーターの「デフォルト」値を適用することは可能ですか?

多分私が何を意味するかを示す方が簡単です:

<?php
    function funcWithOptParam($param1, $param2 = 'optional') {
        print_r('param2: ' . $param2);
    }

    funcWithOptParam('something'); // this is the behaviour I want to reproduce

    // this will result in 'param2: optional'

    funcWithOptParam('something', null); // i want $param2 to be 'optional', not null

    // this will result in 'param2: ' instead of 'param2: optional'
?>

さて、これに対する最も簡単な答えは「nullそれから書いてはいけない」です-しかし私の特別な場合、私は呼び出しarrayのためのパラメータを取得し、これを行うことができるだけです:function

<?php
    funcWithOptParam($param[0], $param[1]);
?>

したがって、がであっても、は$param[1]オプションパラメータのデフォルト値を上書きしますnullnull

これに対する解決策は1つしかありません。オプションのパラメーターをスキップして、次のようにします。

<?php
    function funcWithOptParam($something, $notOptional) {
         if($notOptional === null) {
              $notOptional = 'defaultvalue';
         }

         ...
    }
?>

しかし、これに対する別の解決策があるかどうか知りたいです。nullPHPに「実際の」値はありますか?それは本当に「何もない」に変換されますか?undefinedjsのようなもの?

4

3 に答える 3

3

配列全体を関数の引数として渡してみませんか?あなたは単にそれをこのように呼びます:

funcWithOptParams($params);

そしてそれをそのように扱います:

function funcWithOptParams($params) {
     if(!isset($params[1])) {
          $params[1] = 'defaultvalue';
     }

     ...
}

このアプローチでは、指定したい引数のみを渡し、指定したくない引数にはデフォルト値を設定することができます。ボーナスとして、引数の順序について心配する必要はありません。

于 2012-11-03T14:08:58.100 に答える
0

func_num_argsfunc_get_argsを使用して、必要な動作を作成できます

function funcWithArbitraryNumParams(){
  $args = array();
  if(!empty(func_num_args)){
   $args = func_get_args();
  }

  print_r($args);
}
于 2012-11-03T10:36:45.037 に答える
0

デフォルト値を取得できますが、かなり醜いです...

$function = new ReflectionFunction('your_function_name');

foreach ($function->getParameters() as $param) {
    echo 'Name: ' . $param->getName() . PHP_EOL;
    if ($param->isOptional()) {
        echo 'Default value: ' . $param->getDefaultValue() . PHP_EOL;
    }
    echo PHP_EOL;
}

CodePad

引数がNULLであるかどうかを確認し、そうである場合は、デフォルト値に置き換えます。

于 2012-11-03T10:36:50.267 に答える