- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 stack 上阅读了其他答案关于使用 call_user_func_array
与仅调用函数有关,但我仍然无法收集何时应该使用前者。我知道当您不知道传递了多少个参数时,您可能想使用 call_user_func_array
,因此您可以这样做:$args = func_get_args();
... 但是如果要在函数中使用参数,您不总是需要知道参数吗?
以下两项工作,我假设第一项的开销较小。
$format = new Foo;
$method = 'somemethod';
$arg = 'somevalue';
if (method_exists($format, $method)) {
return $format->$method($arg);
}
对比
return call_user_func_array(array($format, $method), array($arg));
什么时候才能真正受益于使用 call_user_func_array
?
最佳答案
假设您想要访问一个对象,但是通过静态方法,如下所示:
Helper::load();
好吧,这本身是行不通的,因为如果您查看具体类,它没有静态方法:
class Helper {
public function load()
{
// Do some loading ...
}
public function aFunctionThatNeedsParameters( $param1, $param2 )
{
// Do something, and $param1 and $param2 are required ...
}
}
所以在第二个类中,我们可以做这样的事情,因为上面的 Helper 类被加载到依赖注入(inject)容器中(请注意,这两个 Helper 类的名称相同,但会在不同的命名空间中):
class Helper extends DIContainer {
public static $helper_instance = NULL;
public static function get_instance()
{
if( is_null( self::$helper_instance ) )
{
self::$helper_instance = parent::$container['helper'];
}
return self::$helper_instance;
}
public static function __callStatic( $method, $params )
{
$obj = self::get_instance();
return call_user_func_array( [ $obj, $method ], $params );
}
}
问题是,可能还有其他方法需要参数,即使我们的加载方法没有任何参数。
所以在这种情况下我们可以使用Helper::load()
,也可以使用Helper::aFunctionThatNeedsParameters( $param1, $param2 )
我认为这在知道静态类通常不合适的 PHP 框架中被大量使用,但他们希望能够像静态类一样调用方法。我希望这是有道理的。
关于php - 何时使用 call_user_func_array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963744/
第一次尝试处理这个 call_user_func_array,但有些东西不起作用,因为我没有收到函数的响应,我会遗漏什么? function _a_($id, $text) {
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
在组合数组时遇到了一些问题......这可行: $un[0] = array("0:0:0"); //$un[1] = array("1:1:1"); $flat = call
当函数包含引用参数时,下面的函数会产生错误,例如: function test(&$arg, &$arg2) { // some code } 现在我不能对上面的函数使用call_user_fun
我正在使用 mysqli 和准备好的语句为我的数据库编写一个简单的搜索引擎,我目前正在使用 call_user_func_array 来动态创建我的查询。我的问题是:使用 mysqli 是否有更快或更
我在 stack 上阅读了其他答案关于使用 call_user_func_array 与仅调用函数有关,但我仍然无法收集何时应该使用前者。我知道当您不知道传递了多少个参数时,您可能想使用 call_u
本周早些时候我看到了一段代码(不幸的是,我无法检索),我很好奇作者是如何实现 __call() 魔法方法的。代码如下所示: class Sample { protected function
我目前正在构建一个数据库处理程序。在 Firebird 数据库之上运行 PHP 5.4.16。 当我创建了准备好的语句后,我需要使用参数执行 SQL。我做了这个功能: private function
这个问题在这里已经有了答案: How to call the constructor with call_user_func_array in PHP (1 个回答) 关闭7年前。 我已经搜索了许多
这个问题在这里已经有了答案: How to call the constructor with call_user_func_array in PHP (1 个回答) 关闭7年前。 我已经搜索了许多
我使用的是 PHP 5.4.25。采取以下代码: 'John', 'last_name'=>'Doe']); call_user_func_array('fails', ['first_name'=>
这个问题已经有答案了: Sort array using array_multisort() with dynamic number of arguments/parameters/rules/dat
目前我正在使用: call_user_func( $func, $_POST['a'],$_POST['b'],$_POST['c'],$_POST['d'],$_POST['
我正在构建一个模板系统,但遇到了动态调用函数的问题。 当我尝试以下操作时: $args = array( 4, 'test' => 'hello', 'hi' ); 你知道..
PHP 的 call_user_func_array 在 Python 中是否有等效项? ? 最佳答案 以*开头的数组调用函数: function(*array) 关于Python 中的 PHP ca
我今天遇到了一个有趣的问题。我们有一个利用 Zend Frameworks 缓存功能的应用程序。对此应用程序的请求通常使用以下行调用工厂方法 $result = call_user_func_arr
这个问题在这里已经有了答案: Build SELECT query with dynamic number of LIKE conditions as a mysqli prepared state
我有一个方法,简化后看起来像这样: class Foo { public function bar($id) { // do stuff using $this, error occ
如何记录 call_user_func_array 中发生的 fatal error ?它位于作为守护进程运行的 CLI 脚本中。我想在发生错误时记录日志,但它总是抛回错误消息。 我尝试过但无法实现的
当使用 call_user_func_array() 我想通过引用传递一个参数。我该怎么做。例如 function toBeCalled( &$parameter ) { //...Do So
我是一名优秀的程序员,十分优秀!