2011-12-03 35 views
3

我試圖決定它是否適合使用類聲明一組〜20個公共功能:應該使用PHP類嗎?

if (!class_exists('example')) { 

    class example { 

     # Declare ~20 functions (methods), all of 
     # which are public. (There's nothing else 
     # in the class.) 

     public static function one() { /* ... */ } 
     public static function two() { /* ... */ } 
     # ... 

    } # class 

} 

使得可作爲方法:

example::one(); 
example::two(); 

什麼優點/缺點是出現以上方法vs。只是這樣做:

if (!defined('EXAMPLE_LOADED')) { 

    define('EXAMPLE_LOADED', true); 

    function example_one() { /* ... */ } 
    function example_two() { /* ... */ } 
    # ... 

} 

使可用的功能爲:

example_one(); 
example_two(); 

編輯 - 相關的性能測試:

+1

如果使用足夠高的PHP版本,您還可以對它們進行命名空間。 –

+3

你應該很可能不會爲此使用類。不應將類用作任意函數的「容器」。 –

+1

您可能會更好地使用[namespaces](http://us.php.net/namespaces) - 它取決於您使用的PHP版本。 –

回答

3

這裏有一個關於這個主題的鏈接。

When to use static vs instantiated classes

我也會說,我以前分組的類似功能於純靜態類。我喜歡它給出的語法糖。

format::usaPhone($val); 
format::usaZip($val); 
date::convertTz($date, $tz1, $tz2); 

這樣的東西。我建議你務實一點,確保你最終做的事情滿足兩件事。

  1. 您對結果感到滿意。
  2. 生成的代碼有意義。

這可能聽起來像是一個明顯的陳述,但它是一個很好的提醒,當一個簡單的解決方案出現時,不要過度考慮事情。

+0

我主要關注的是讓人們很容易地弄清楚如何使用,但同時要保持其性能優化和可維護性。我在這個問題中增加了一些性能測試的鏈接,儘管只有當你做了大量的操作時,這些差異才是重要的。將相關的funcs組織到靜態工具類中是很有意義的。我認爲,只要他們名字正確,人們很容易理解。命名空間反斜槓是一個旅程,如果你從來沒有見過它,但我認爲保持命名空間fu​​ncs會更容易b/c你不需要使用'self ::' – ryanve

+0

不要忽視低功能。 :)如果你願意,你可以使用命名約定命名空間。 –

+0

我一直在問,爲什麼如果,爲什麼定義?你來自C背景嗎? C++,C#,C。只需爲你的庫使用require_once,並忘記檢查已定義的內核。 –

0

第一種情況會增加抽象級別並幫助您將(通常)輔助方法分組。

最好的做法是將您的示例類單獨的文件中,然後讓當你需要他們

require_once('./path/to/example.class.php'); 
1

好吧,oop和功能程序方法之間的區別是開銷。

絕對的oop是好的,他們可以將您的代碼分組,更容易管理,它的主要特點使其理想是您的代碼將變得可重用,使其更加靈活,這就是爲什麼這種方法更適合大型項目或系統。 oop的缺點是它在開銷方面比較昂貴,如果與功能方法相比會更慢,雖然功能方法在性能上要快得多,但它不會像oop所期望的那樣可以重複使用,但它將全部取決於在你身上。

我對你的建議是,如果它真的是一個大項目你的處理然後oop是非常好的,但如果你認爲它不是那麼必要在oop做它,然後去功能或如果可能,你也可以做程序化的方式比2更快,但正如我所說的,這一切都取決於你的策略。