使用动态类名、方法和参数调用静态方法

问题描述 投票:0回答:4

我有一个包含 4 个条目的 php 数组。我需要使用数组中的数据调用类方法。

$array = array('USER', 'username', 'other', 'test');

我想用它来生成这个

$array[0]::find_by_$array[1]($array[3]); 

它必须看起来像

USER::find_by_username(test);

如何将数组值转换为这一行?

正确的语法是什么?

php dynamic-programming static-methods method-call dynamic-class
4个回答
2
投票
call_user_func_array(array($array[0],'find_by_'.$array[1]),$array[3])

但这不是管理代码的最干净的方法,没有验证类或方法是否存在,因此可能会失败


1
投票

您可以使用

call_user_func_array
来调用 callback,并以数组作为参数:

$callback = array($array[0], 'find_by_'.$array[1]);
$params = array($array[3]);

$ret = call_user_func_array($callback, $params);

1
投票

call_user_func_array

call_user_func_array(array($array[0], 'find_by_'.$array[1]), $array[3]);

0
投票

您已经非常接近 PHP5.4 的有效语法了。 您只需将方法名称封装在大括号中即可阐明字符串组成。 演示

设置:

class USER // should be a StudlyCased class name
{
    static function find_by_username($name)
    {
        printf('You tried to find a user by username "%s"', $name);
    }
}

$array = array('USER', 'username', 'other', 'test');

没有

call_user_func_array()
的有效现代调用:

  • 插值:

    $array[0]::{"find_by_{$array[1]}"}($array[3]);
    
  • 串联:

    $array[0]::{'find_by_' . $array[1]}($array[3]);
    

输出:

You tried to find a user by username "test"


@Gumbo 的正确实现将一直工作到 PHP5.0。 演示

call_user_func_array(
    array($array[0], 'find_by_' . $array[1]),
    array($array[3])
);
© www.soinside.com 2019 - 2024. All rights reserved.