Php 如何称呼一个类->;字符串中的方法?

Php 如何称呼一个类->;字符串中的方法?,php,string,class,function,methods,Php,String,Class,Function,Methods,可以从字符串调用类和方法吗 比如: // $_REQUEST['var'] = 'House-Kitchen'; $var = explode('-',$_REQUEST['var']); echo $var[0]->$var[1]; 更好的方法是尝试 我确实试过: $House = new stdClass(); $House->Kitchen = "visible result"; $_REQUEST['var'] = 'House-Kitchen'; $var = e

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

比如:

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

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

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

更好的方法是尝试

我确实试过:

$House = new stdClass();
$House->Kitchen = "visible result";

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

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

echo $$var[0]->$var[1];
它起作用了。注意:第一个元素需要使用double$(使用带有
$var[0]
名称的变量)


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

更好的方法是尝试

我确实试过:

$House = new stdClass();
$House->Kitchen = "visible result";

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

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

echo $$var[0]->$var[1];
它起作用了。注意:第一个元素需要使用double$(使用带有
$var[0]
名称的变量)


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

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

call_user_func(array($var[0], $var[1]));
call_user_func(array(get_class(${$var[0]}), $var[1]));
如果
$var[0]
是类实例的名称,则以下操作将起作用

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


  • 对。这是可能的。如果
    $var[0]
    是类的名称,则以下操作将起作用

    call_user_func(array($var[0], $var[1]));
    
    call_user_func(array(get_class(${$var[0]}), $var[1]));
    
    如果
    $var[0]
    是类实例的名称,则以下操作将起作用

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


  • 我要冒险出去问问你为什么要这样的东西?你试过了吗?你的代码应该可以工作。。。虽然您永远不应该让用户输入直接影响以这种方式执行的代码……或者对于方法,$var[0]->$var[1](),但是如果$\u请求['var']是'this authorize'?:)这类似于:$Class1->Edit($\u请求)。因此,序列化表单中的所有值都将直接传递到特定的类和方法。我不需要箱子和开关。我会冒险出去问你为什么要这样的东西?你试过了吗?你的代码应该可以工作。。。虽然您永远不应该让用户输入直接影响以这种方式执行的代码……或者对于方法,$var[0]->$var[1](),但是如果$\u请求['var']是'this authorize'?:)这类似于:$Class1->Edit($\u请求)。因此,序列化表单中的所有值都将直接传递到特定的类和方法。我不需要箱子和开关。