我想在PHP中使用变量定义类名。这可能吗?
让我解释一下。
我是一个小型自定义CMS,允许最终用户为表名配置前缀。因此用户可以定义诸如“rc_”的前缀。问题是,我有很多模型使用表名作为类。因此,例如,如果我的一个表是rc_posts
,则将调用该模型
class MyModel_Rc_posts extends MyModelController {
// code here
}
有没有办法在PHP中使用变量定义一个类而不使用eval()
,如:
class MyModel_{$PREFIX}posts extends MyModelController {
// code here
}
我想避免使用eval的原因是因为其中一些类可能会变得很长。建议表示赞赏。
答案 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
技巧,您将获得动态名称。