在PHP中静态使用静态常量中的类名

在PHP中静态使用静态常量中的类名,php,static-variables,Php,Static Variables,我将类名Car存储为常量中的静态变量。我想用这个常量调用函数a。一个选项是使用中间变量$tmp。然后我可以调用$tmp::a()。有没有一种方法可以在一个声明中做到这一点?我的尝试如下 class Car{ public static function a(){ return 'hi'; } } class Constants{ public static $use='Car'; } $tmp=Constants::$use; echo(${Cons

我将类名
Car
存储为常量中的静态变量。我想用这个常量调用函数
a
。一个选项是使用中间变量
$tmp
。然后我可以调用
$tmp::a()
。有没有一种方法可以在一个声明中做到这一点?我的尝试如下

class Car{
    public static function a(){
        return 'hi';
    }
}

class Constants{
    public static $use='Car';
}

$tmp=Constants::$use;

echo(${Constants::$use}::a());

结果如下

PHP Notice:  Undefined variable: Car in /home/mU9w5e/prog.php on line 15
PHP Fatal error:  Class name must be a valid object or a string in /home/mU9w5e/prog.php on line 15
总是有:


我能找到的唯一替代方法是使用我从未听说过的东西,但嘿,这就是为什么

我发现了,这似乎比调用用户函数更臃肿,但这是我能找到的唯一替代方法:

<?php
class Car{
    public static function a(){
        return 'hi';
    }
}

class Constants{
    public static $use='Car';
}
$reflectionMethod = new ReflectionMethod(Constants::$use, 'a');
echo $reflectionMethod->invoke(new Car());

我有一个疯狂的解决方案,但你不应该使用它:^)


1行:
echo(新的ReflectionMethod(常量::$use,'a'))->invoke(常量::$use):],但生产服务器很少升级。不幸的是(应该注意的是,与更简单的方法相比,这样做的开销是巨大的。反射、两个新对象以及对对象调用静态方法都是避免这种情况的原因。Holy s*!t.:)我尝试了类似的方法,但从未获得正常的结果。@CORRUPT,请看我关于静态调用的介绍。
<?php
class Car{
    public static function a(){
        return 'hi';
    }
}

class Constants{
    public static $use='Car';
}
$reflectionMethod = new ReflectionMethod(Constants::$use, 'a');
echo $reflectionMethod->invoke(new Car());
echo (new ReflectionMethod(Constants::$use, 'a'))->invoke(new Car());
echo ${${Constants::$use} = Constants::$use}::a();