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

发布于 2024-12-29 21:52:02 字数 315 浏览 3 评论 0原文

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

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

我想用它来生成它,

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

它必须看起来像

USER::find_by_username(test);

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

正确的语法是什么?

I have a php array with 4 entries. And I need to call a class method using the data in my array.

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

This I want to use to generate this

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

it must look as

USER::find_by_username(test);

How I can convert the array values into this line?

What is the correct syntax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冰雪之触 2025-01-05 21:52:03

您可以使用 call_user_func_array 来调用 回调,以数组作为参数:

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

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

You can use call_user_func_array to call a callback with an array as parameters:

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

$ret = call_user_func_array($callback, $params);
谁与争疯 2025-01-05 21:52:03

call_user_func_array

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

call_user_func_array

call_user_func_array(array($array[0], 'find_by_'.$array[1]), $array[3]);
囍笑 2025-01-05 21:52:03

您已经非常接近 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_' . $数组[1]}($数组[3]);
    

输出:您试图通过用户名“test”查找用户


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

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

You were very close to what is valid syntax as of PHP5.4. You merely need to use curly braces and quoting to encapsulate the method name. Demo

Set up:

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');

Valid modern calls without call_user_func_array():

  • Interpolation:

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

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

Output: You tried to find a user by username "test"


@Gumbo's correct implementation will work all the way down to PHP5.0. Demo

call_user_func_array(
    array($array[0], 'find_by_' . $array[1]),
    array($array[3])
);
听你说爱我 2025-01-05 21:52:02
call_user_func_array(array($array[0],'find_by_'.$array[1]),$array[3])

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

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

But this isn't the cleanest way to manage your code, there's no validation that the class or method exists, so subject to potential failure

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文