2012-02-02 120 views
2

我想要一個小小的php模塊。該模塊將具有純功能的方法。所以,這只是一個功能集合。所有函數只取決於輸入參數獲取一些參數並返回結果。爲php模塊選擇什麼模式?

我有一些建議:

1.靜態類

PHP還沒有真正的靜態類,所以我只是做了所有的靜態方法的類:

class Some_Module 
{ 
    static public function sum($a, $b, $c) 
    { 
     return $a+$b+$c; 
    } 

    static public function method2($a, $b) 
    { 
     return $a-$b+5; 
    } 
} 

這是非常容易使用這樣的模塊:

$x = Some_module::sum(1,2,3); 

但是,我聽說過(這裏有很多話題),靜態是一種不好的做法。

2.辛格爾頓

這不是那麼容易使用:

// we should not to forget to get instance 
$module_instance = new Some_module; 
$x = $module_instance->sum(1,2,3); 

不便是事實,那我們現在應該初始化這個模塊。 另外,SO上有大量的主題,其中解釋了爲什麼Singleton在PHP中沒有用處,所以這也是一個不好的做法。

這種模塊使用什麼模式?

+0

這是一個不好的做法,採取傳聞的建議。 - 你的例子太抽象了,不推薦使用其他實現。然而,顯然將輸入函數引入對象並不是非常明智的。雖然它們應該是普通的函數,但靜態類是功能分組的一個可接受的解決方法(僅此而已)。特別是如果你無法忍受命名空間的語法替代。 – mario 2012-02-02 02:57:22

回答

3

我覺得這個討論會在你決定幫助Static methods: are they still bad considering PHP 5.3 late static binding?

個人而言,這取決於上下文。存儲一堆雜項。輔助方法,我更可能將它用作全局和命名空間。在存儲特定類別的有限數量的方法時,不需要實例化,靜態類可能是一個不錯的選擇。只是要注意單元測試的目的,許多類在錯誤的背景下使用靜態方法,如cool::method將會是地獄。

// keep it abstract to prevent it from being instantiated 
abstract class Foo { 
    // cannot be altered if inherited, although limitation still exists 
    final public static function bar() { 
     echo 'test'; 
    } 
} 

Foo::bar(); 
2

簡單,使用一個類,但不要使這些方法是靜態的。當然,這意味着你將使用一條額外的線來實例化它,這不是什麼大問題。你將能夠正確地擴展這個類,並且爲了測試而模擬它。