對於這個問題,我想介紹一下我目前的設計和使用特質的想法。我想知道我對特質的理解是否正確,以及我的問題是否可以用不涉及他們的另一種設計來解決。使用PHP特性來模擬多重繼承
在我的框架我目前的類層次結構是這樣的:
interface IPage { /* ... */ }
interface IForm extends IPage { /* ... */ }
abstract class AbstractPage implements IPage { /* ... */ }
abstract class AbstractForm extends AbstractPage implements IForm { /* ... */ }
在我的應用程序是基於我曾經有過如下的框架:
abstract class AbstractBasePage extends AbstractPage { /* ... */ }
因此我可以添加一些此框架或其他應用程序不常見的此特定應用程序的所有頁面的更多內容。這一直很好地工作,直到我按照第一個代碼片段的指示實現了頁面和表單的分離。現在,我結束了這樣的事情:
abstract class AbstractBasePage extends AbstractPage { /* ... */ }
abstract class AbstractBaseForm extends AbstractForm { /* ... */ }
讓我們在一個應用中承擔應有的每一頁和形式,它指出一些特別的東西是否顯示在模板中的變量。我需要在AbstractBasePage
和AbstractBaseForm
中引入相同的變量。這樣做會迫使我將這兩個片段保持同步,這並不是很好。
我正在考慮創建一個將變量和函數公開給這兩個類的特徵,他們可以在相應的函數中引用它們。至少可以使用這種特性來減少代碼重複,因爲我可以引入一個可以被兩個類調用的公共訪問方法,但除了有一個體面的抽象外,不是嗎?
這是什麼特質應該幫助?有更合適的方法嗎?