2011-03-23 64 views
6

是否有類似於Ruby的模塊在PHP中構造?模塊的概念在PHP中類似於Ruby

基本上我需要創建一個模塊一個mix-in /黑白不同類等

我知道,PHP有混入的B/W上的不同類的概念,但不知道模塊。

+0

請看這個關於[Abstract Classes and Interfaces](http://stackoverflow.com/q/15960729/263858)之間區別的討論。 – 2014-01-13 19:29:20

回答

10

PHP沒有像Ruby那樣有mixin。也就是說,在定義了一個類後,你不能改變任何有關類的東西,並且在創建它之後,你不能在一個實例中增加新的方法。 PHP 只有具有普通舊式香草單繼承機制,接口和5.4中的composing traits

PHP可能對Ruby模塊最接近的東西是一個類。 PHP可能對Ruby mixin最接近的是一個特性,但特性是而不是動態。在定義類時,它們必須被任何實現類引用。它們不能在運行時添加或修改,並且適用於整個類,而不適用於單個實例。

儘管PHP 5.3具有名稱空間,但它們僅限於保存函數,類,常量,特徵和接口,意思是您無法將變量定義爲名稱空間的第一級成員。試圖這樣做會導致它們在根名稱空間中被定義,這肯定不是任何人想要的。此外,沒有命名空間繼承機制,只有命名空間參考機制。

1:雖然可以在通過簡單引用它們創建對象後添加實例變量(屬性),但這被認爲是不好的做法。屬性也可以包含匿名函數,但通過這種方法來模擬添加方法也是不好的做法。

+0

我喜歡你的例子,但5.3中確實存在名稱空間常量。 – 2014-10-23 13:28:01