我正在开发一个 php web api,它带有大量需要重构的代码。编写代码的人想要将静态配置类包含到 api 资源中,然后获取该类的实例,如下所示:
<?php
$obj = "User";
$confObjectSuffix = "_conf";
$confObject = $obj.$confObjectSuffix;
if ($confObject::inst()->checkMethod($method)) {
.....
这给出了错误“解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM in .....”,因为 $confObject 是一个字符串而不是一个对象。
我写了一些测试代码:
<?php
$class = "User_conf";
echo "<pre>";
print_r($$class::Inst());
echo "</pre>";
class User_conf {
private static $INSTANCE = null;
public static function Inst() {
if(User_conf::$INSTANCE === null) {
User_conf::$INSTANCE = new User_conf();
}
return User_conf::$INSTANCE;
}
}
但也不能让它与 $$ 一起使用,是否有其他解决方法?我不想重写不必要的内容。
最佳答案
您可以使用call_user_func
来捕获实例,然后根据需要进行处理:
$instance = call_user_func(array($confObject, 'inst'));
if($instance->checkMethod($method)) {
...
关于PHP:通过字符串值获取静态类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491746/