在尝试在静态函数上使用变量时,我已经阅读了这里的一些不同帖子(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方法一样,但它似乎不是 - 有人能指出我正确的方向吗?
谢谢! 基督教
答案 0 :(得分:3)
call_user_func_array()
期望第二个参数是函数实际参数的数组(数组中的键将被忽略)。你真正想要的是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'))