1

重複の可能性:
PHP 静的メソッドを呼び出すときに変数を使用する

静的関数で変数を使用しようとすると、ここでいくつかの異なる投稿 (IE PHP Using a variable when calling a static method ) を読みましたが、call_user_func_array() 関数を動作させることができないようです。クラス名で変数を直接呼び出すことができた場合と同じです。

PHP >= 5.3.0 メソッド:

$data = $factory_model::by_array(array(
    $form_fields['name_field']  => $value
));

PHP < 5.3.0 方法:

$data = call_user_func_array(array($factory_model, 'by_array'), array(  
    $form_fields['name_field']  => $value
));

これは私が継承したコードなので、モデルをそれほど変更することはできませんが、次の出力が得られるはずです。

initiative_forecast_type Object
(
    [id:initiative_forecast_type:private] => 0
    [forecast_type:initiative_forecast_type:private] => TRTR
    [tstamp] => 2012-06-11 12:52:07
)

標準のPHP 5.3メソッドを使用して行うこと(私のユーザー入力/値は「TRTR」でした)

しかし、call_user_func_array メソッドを使用すると、次のようになります。

initiative_forecast_type Object
(
    [id:initiative_forecast_type:private] => 0
    [forecast_type:initiative_forecast_type:private] => 
    [tstamp] => 2012-06-11 12:52:07
)

したがって、「forecast_type」フィールドは設定されていません。ここにモデルをアップロードしました - http://pastebin.ca/2160201

参考までに - $factory_model = Initiative_forecast_type_factory

2 call_user_func_array() 関数は 5.3.0 メソッドと同じように機能するはずだと思っていましたが、そうではないようです - 誰か私を正しい方向に向けることができますか?

ありがとう!キリスト教徒

4

1 に答える 1

3

call_user_func_array()は、2 番目のパラメーターが関数の実引数の配列であることを期待します (配列内のキーは無視されます)。あなたが実際に欲しいのはcall_user_func().

call_user_func_array('func', array('foo' => 'bar')) === func('bar')
call_user_func_array('func', array(array('foo' => 'bar'))) === func(array('foo' => 'bar'))
call_user_func('func', array('foo' => 'bar')) === func(array('foo' => 'bar'))
于 2012-06-11T12:08:10.097 に答える