由于PHP的call_user_method()
和call_user_method_array()
被标记为已弃用,我想知道推荐哪种替代方案?
一种方法是使用call_user_func()
,因为通过给出一个带有对象和方法名称的数组作为第一个参数,就像弃用的函数一样。由于此功能未标记为已弃用,我认为原因不是非OOP时尚的使用吗?
我能想到的另一种方式是使用Reflection API,这可能是最舒适和面向未来的选择。然而,这是更多的代码,我可以想象它比使用上面提到的函数慢。
我感兴趣的是:
答案 0 :(得分:26)
正如您所说call_user_func
可以轻松复制此功能的行为。有什么问题?
call_user_method
页面甚至将其列为备选方案:
<?php
call_user_func(array($obj, $method_name), $parameter /* , ... */);
call_user_func(array(&$obj, $method_name), $parameter /* , ... */); // PHP 4
?>
至于为什么这已被弃用,this posting explains it:
这是 因为
旧的方式:call_user_method()
和call_user_method_array()
功能 很容易被复制:
call_user_method($func, $obj, "method", "args", "go", "here");
新方式:
call_user_func(array(&$obj, "method"), "method", "args", "go", "here");
就个人而言,我可能会选择Chad发布的变量建议。
答案 1 :(得分:17)
你可以使用variable variables来做,这看起来对我来说最干净。而不是:
call_user_func(array($obj, $method_name), $parameter);
你这样做:
$obj->{$method_name}($parameter);
答案 2 :(得分:1)
做类似的事情:
我在__construct()方法中使用类似的东西。
$params = array('a','b','c'); // PUT YOUR PARAMS IN $params DYNAMICALLY
call_user_func_array(array($this, $this->_request), array($params));
第一个参数:Obect实例, 第二个参数:调用方法, 第三个论点:params
在测试方法或类之前,使用:
method_exists()
class_exists()
干杯
答案 3 :(得分:0)
如果您收到以下错误: 警告:call_user_func()期望参数1是有效的回调,第二个数组成员不是第X行的C:\ www \ file.php中的有效方法 和这样的代码:
call_user_func(array($this, $method));
$ method name
的use(string)声明call_user_func(array($this, (string)$method));