我怎么能得到这样的东西?
$class_name = 'ClassPeer';
$class_name::doSomething();
答案 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();
答案 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();
工作正常