2012-09-01 116 views
0

我想在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

確切重複http://stackoverflow.com/questions/7438324/how-to-declare-a-php-class-with-a-variable-name – Peter

+0

檢測到的代碼氣味:爲什麼你需要綁定域對象如果兩者完全不同,則爲表名指定名稱:一個是存儲,另一個是域模型。 = \如果你真的想要這個,你應該有一個表格名稱屬性的「Table Data Gateway」。 –

回答

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() - 在別名類上,它會給你原來的(靜態)類名,而不是別名。用醜陋的詭計你會得到動態的名字。

+0

太棒了。我會給這個鏡頭並回復! –