来自未知对象的静态方法调用

时间:2012-10-09 14:54:42

标签: php

我想从我的一个对象中调用一个静态方法。如果我知道对象的名称,这没有问题,但在这种情况下,我没有 我有一个包含多个对象名称的数组,我想从其中一个数组元素中调用该方法。所以,它看起来像这样:

function call_method($key)  {
    $tmp = array('key1' => 'objectname1','key2' => 'objectname2','key3' => 'objectname3');
    if(array_key_exists($key, $tmp))    {
        $tmp::static_method();
    }
}

但是,这个解决方案无效。有人知道如何使这个工作吗?

2 个答案:

答案 0 :(得分:3)

$tmp是一个数组,因此它没有与之关联的静态方法。您需要查找该值并使用:

// this will work for newer versions of PHP
$klass = $tmp[$key];
$klass::static_method();

// in some older versions, you may need to use call_user_func:
call_user_func(array($klass, 'static_method') /*, your args here */);

答案 1 :(得分:2)

现在,您正在尝试调用该数组上的静态函数。你应该这样做:

 if(array_key_exists($key, $tmp))    {
    $tmp[$key]::static_method();
}

以为你在数组中指定了名称“object”,我假设它们是类名。无法使用实例调用静态函数。