建议替换已弃用的call_user_method?

2022-08-30 18:17:45

由于PHP的call_user_method()call_user_method_array()被标记为已弃用,我想知道推荐什么替代方案?

一种方法是使用call_user_func(),因为通过给出一个带有对象和方法名称的数组作为第一个参数,可以像弃用的函数一样做同样的事情。由于此函数未标记为已弃用,因此我认为原因不是它们的非OOP时尚用法吗?

我能想到的另一种方法是使用反射API,这可能是最舒适和面向未来的替代方案。尽管如此,它更多的代码,我可以想象它比使用上面提到的函数慢。

我感兴趣的是:

  • 有没有一种全新的技术来按名称调用对象的方法?
  • 哪个是最快/最好/官方的替代品?
  • 弃用的原因是什么?

答案 1

正如您所说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
?>

至于为什么它被弃用,这篇文章解释了它:

这是因为 and 函数可以很容易地通过以下方式复制: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");

就个人而言,我可能会采用乍得发布的变量建议。


答案 2

你可以使用变量来做到这一点,这对我来说是最干净的。而不是:

call_user_func(array($obj, $method_name), $parameter);

是吗:

$obj->{$method_name}($parameter);

推荐