【问题标题】:PHP: Call a class from array?PHP:从数组中调用一个类?
【发布时间】:2010-12-11 15:14:54
【问题描述】:

我刚刚为自己构建了一个函数,用于获取 URI 字符串并将其转换为数组,如下所示。本示例基于http://mydomain.com/mycontroller/mymethod/var的URL

Array
(
    [0] => mycontroller
    [1] => mymethod
    [2] => var
)

如果我写new $myArray[0];,我将加载myController 类,但是我可以创建一个函数来处理方法的最终存在以及它们各自的变量调用吗?

【问题讨论】:

    标签: php oop class routes


    【解决方案1】:

    我不确定您所说的 “处理方法的最终存在及其使用各自变量的调用”是什么意思,但您可能在 call_user_func_array 之后:

    call_user_func_array(
        array($myArray[0], $myArray[1]),
        array($myArray[2])
    );
    

    如果您想对使用$controller = new $myArray(0) 创建的具体实例执行此操作,请将$myArray[0] 替换为$controller,例如

    $controller = new $myArray(0);
    call_user_func_array(
        array($controller, $myArray[1]),
        array($myArray[2])
    );
    

    如果您不关心实例在调用后丢失,请传递new $myArray[0]

    call_user_func_array(
        array(new $myArray[0], $myArray[1]),
        array($myArray[2])
    );
    

    否则,您将收到 E_STRICT 通知,并且无法在 myMethod 中引用 $this。另请参阅PHP manual on possible callback formats


    要验证方法和类是否实际存在,可以使用

    例子:

    if (method_exists($myArray[0], $myArray[1])) {
        call_user_func_array(*/ … */)
    }
    

    如果还有其他意思,请澄清您的问题。 On a sidenote, this was probably answered before,但由于我不确定问题是什么,所以我也不确定选择哪一个。

    【讨论】:

    • 这只适用于静态方法,否则你需要一个类的实例
    • @kemp 不正确,但添加了说明。我想这就是你的意思。
    【解决方案2】:

    我想这也可以:

    $obj = new $myArray[0];
    $obj->{$myArray[1]}($myArray[2]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多