5

簡単に言うと、フレームワークの一部として次の機能があります。

public function use_parameters()
{
    $parameters = func_get_args();

    $stack = debug_backtrace();

    foreach($stack[0]['args'] as $key => &$parameter)
    {
        $parameter = array_shift($this->parameter_values);
    }
}

$this->parameter_values = array('value1', 'value2', 'value3', 'value4', 'value5', ...);

次のコンテキストで使用されます。

$instance->use_parameters(&$foo, &$bah);

割り当て:

$foo = 'value1';
$bah = 'value2';

もう一度呼び出す

$instance->use_parameters(&$something); 

設定します

$something = 'value3'

等々。

5.3 の時点で、「非推奨: 呼び出し時の参照渡しは非推奨です」という警告が返されます。5.3 の作業方法に準拠するために、& を削除した結果、次のようになりました。

$instance->use_parameters($foo, $bah);

残念ながら、これにより引数が設定されず、解決策を考え出すのに苦労しています。

その価値のために、Apache/2.2.16 (Debian) で PHP v5.3.3-7 を実行しています。

どんな助けでも大歓迎です。

4

2 に答える 2

2

PHP ではそれを行うことはできず、参照の概念を悪用しています。デフォルト値を使用しますが、参照引数を明示的に指定する必要があります。 ただし、割り当てられていない参照変数が設定されるため、デフォルトとして NULL を使用したくありません。したがって、パラメーターとして使用されないことがわかっている定数を定義する必要があります。コードは次のようになります。

    const dummy="^^missing^^";

    public function use_parameters(&$a, &$b=self::dummy, &$c=self::dummy ) {
        $a=array_shift($this->parameter_values);
        if($b!==self::dummy) $b=array_shift($this->parameter_values);
        if($c!==self::dummy) $c=array_shift($this->parameter_values);
        # add $d,$e,$f,... as required to a sensible max number
    }

参照を適切に使用しているため、debug_backtrace() ボッチは必要ないことに注意してください。

于 2012-07-06T11:50:57.633 に答える
1

これまで見てきたように、PHP 5 または ... ではそれを行うことはできませんが、これは推奨されておらず、警告が発生します。関数の引数の最大数を定義するか、配列を使用する必要があります。

public function use_parameters(&$arg1, &$arg2 = NULL, &$arg3 = NULL)
{
    // if ($arg2 !== NULL)
    // if ($arg3 !== NULL)
}

$parameters = array(0 => &$foo, 1 => &$bah);

public function use_parameters($args)
{
    // Handle the array elements
}
于 2012-07-06T11:24:00.873 に答える