在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();