2012-05-05 18 views
1

我想在我的項目中使用特徵,對於多重特性我想使用特徵。動態創建具有特徵綁定的類

所以我創造了一些特質使用例如:tItem_Epic,tItem_Weapon,Item_Driver

當我創建劍新的類,我想我可以用eval創建類:

<?php 
function new_item_class($type) 
{ 
    eval('class Item_'.ucfirst($type).' extends Item_Driver { use tItem_Epic, tItem_Weapon; }'); 
} 
?> 

這是一個例。還有一些更改eval過程的參數(如:項目質量等)。

這是否會減慢進度?或者我應該爲每個項目類型創建一個文件並在需要時調用它們?哪一個會更快?

+0

特徵不是多重繼承。它是基於編譯器的複製和粘貼。那麼你在那裏做什麼(基於用戶代碼執行的複製和粘貼使用基於編譯器的複製和粘貼)看起來有點過於複雜,我必須承認。這並不意味着它自己的意思,只是說。 – hakre

+0

是的,我知道特質是如何工作的。但是在我的項目中,劍的可能性太大,每一個可能性都需要它自己的方法。所以創建一個課堂上的課,對我來說似乎是對的 – Valour

+0

也許你可以通過你的設計來改進它,但是沒有太多的東西與你的問題分享(這可能不是你想要的)。對於技術方面,我添加了一個答案。 – hakre

回答

2

你可以在磁盤上生成可能對IDE有益的文件,因爲它們也可以解析這些文件,而且它不那麼神奇。

對於PHP,eval(您的代碼示例)和include(磁盤上的文件示例)之間沒有太大差別。所以,我會說你喜歡做什麼。

我個人更喜歡文件,因爲它比那些魔法類更直接。我不會尋找「表現」的理由來決定。你談論的表演類型是短視的,因爲它對你談論的是哪種表演還沒有定論,特別是因爲你還沒有遇到瓶頸。

+0

我知道很久以前就有人問,但我認爲它可能仍然有用。包含更多更好的解決方案。在這種情況下,Eval很危險,主要是因爲沒有測試它的選項。使用include你可以隨時在編譯後看到文件。你也可以看看PHP中的原型(比如javascript)。你可以在https://github.com/domnikl/DesignPatternsPHP的php中找到不同的模式。 –