PHP:通过字符串值获取静态类的实例

标签 php oop static

我正在开发一个 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/

相关文章:

php - 查找本月的第二个和第四个星期六

php 帮助 - 实例化函数

ios - 在 Swift 中存储一个没有初始化的对象

java - 有没有办法动态地从不同的类获取所有静态字段及其值?

Nifi 处理器中的 Java ExceptionInInitializer 错误

PHP 简单 XML : insert node at certain position

php - 在 Visual Studio Code 中为 PHP 重命名重构

java - 抽象和封装有什么区别?

c++ - 在 OpenMP 中使静态类成员线程私有(private)

php - 我的视频使用php的路径是什么