从变量创建类名

时间:2012-09-01 18:23:24

标签: php codeigniter variables model

我想在PHP中使用变量定义类名。这可能吗?

让我解释一下。

我是一个小型自定义CMS,允许最终用户为表名配置前缀。因此用户可以定义诸如“rc_”的前缀。问题是,我有很多模型使用表名作为类。因此,例如,如果我的一个表是rc_posts,则将调用该模型

class MyModel_Rc_posts extends MyModelController {
         // code here
}

有没有办法在PHP中使用变量定义一个类而不使用eval(),如:

class MyModel_{$PREFIX}posts extends MyModelController {
// code here
}

我想避免使用eval的原因是因为其中一些类可能会变得很长。建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

看看class_alias - 它应该可以帮助你实现这一点!

为了清楚说明:您使用“普通”名称创建类,然后根据需要添加别名。别名可以是任何字符串,包括存储在变量中的字符串。

修改

虽然我认为,class_alias()是要走的路,但这里有一个如何在没有它的情况下做到这一点的例子。

从你的OQ:

class MyModel_Rc_posts extends MyModelController {
         // code here
}

现在

eval("class MyModel_{$PREFIX}posts extends MyModel_Rc_posts {};");

应该做与class_alias()非常相似的事情。

如果稍后需要get_class(),可能需要执行此尝试 - 在别名类上,它将为您提供原始(静态)类名,而不是别名。使用丑陋的eval() / extends技巧,您将获得动态名称。