如果我拥有的是类名的字符串,如何从类中调用静态方法?

时间:2009-06-15 19:41:26

标签: php

我怎么能得到这样的东西?

$class_name = 'ClassPeer';
$class_name::doSomething();

7 个答案:

答案 0 :(得分:59)

取决于PHP的版本:

call_user_func(array($class_name, 'doSomething'));
call_user_func($class_name .'::doSomething'); // >5.2.3

答案 1 :(得分:15)

要释放IDE自动完成和错误检测的强大功能,请使用以下命令:

$class_name = 'ClassPeer';

$r = new \ReflectionClass($class_name );

// @param ClassPeer $instance

$instance =  $r->newInstanceWithoutConstructor();

//$class_name->doSomething();
$instance->doSomething();

基本上我们在这个类的实例上调用静态方法。

答案 2 :(得分:10)

使用call_user_func。另请阅读PHP callbacks

call_user_func(array($class_name, 'doSomething'), $arguments);

答案 3 :(得分:4)

反射(PHP 5支持它)是你如何做到这一点。阅读该页面,你应该能够弄清楚如何调用这个函数。

$func = new ReflectionFunction('somefunction');
$func->invoke();

Documentation Link

答案 4 :(得分:0)

在我几乎错过了VolkerK最简单的解决方案后,我决定将其扩展并放入帖子中。这是如何调用实例类

上的静态成员
// calling class static method
$className = get_class($this);
$result = $className::caluclate($arg1, $arg2);

// using class static member
foreach ($className::$fields as $field) {
  :
}

答案 5 :(得分:0)

如果需要调整名称空间

$call = call_user_func(array('\\App\\Models\\'.$class_name, "doSomething"));

答案 6 :(得分:0)

这些答案都已过时:

<?php

class MyTest{
    
    public static function bippo(){
        echo "hello";
    }
}

$a = MyTest::class;
$a::bippo();

工作正常