【问题标题】:How do I call a Class->Method from strings?如何从字符串中调用 Class->Method?
【发布时间】:2025-12-30 04:35:06
【问题描述】:

可以从字符串中调用类和方法吗?

类似:

// $_REQUEST['var'] = 'House-Kitchen';

$var = explode('-',$_REQUEST['var']);

echo $var[0]->$var[1];

【问题讨论】:

  • 我会冒昧地问你为什么想要这样的东西?
  • 你试过了吗?您的代码应该可以工作...尽管您应该从不让用户输入直接影响以这种方式执行的代码...
  • 好吧,或者可能是 $var[0]->$var[1]() 一个方法...但是如果 $_REQUEST['var'] 是 'this-authorize'? :)
  • 类似于:$Class1->Edit($_REQUEST)。因此,序列化表单中的所有值都将直接传递给特定的类和方法。我不需要外壳和开关。

标签: php string class function methods


【解决方案1】:

是的。这是可能的。如果$var[0]类的名称,那么以下将起作用。

call_user_func(array($var[0], $var[1]));

如果$var[0]类实例的名称,那么以下将起作用。

call_user_func(array(get_class(${$var[0]}), $var[1]));

链接:

  1. call_user_func
  2. get_class

【讨论】:

    【解决方案2】:

    更好的方法是尝试。

    我试过了:

    $House = new stdClass();
    $House->Kitchen = "visible result";
    
    $_REQUEST['var'] = 'House-Kitchen';
    
    $var = explode('-',$_REQUEST['var']);
    
    echo $$var[0]->$var[1];
    

    它有效。注意:您需要对第一个元素使用双 $ (以使用具有$var[0] 名称的变量)。

    并且要非常小心:这是一个高度安全漏洞(您允许每个人调用当前定义的类上的方法)。

    【讨论】: