2013-07-05 107 views
1

我寫在PHP的應用程序,我已經收集的類中的輔助功能的集合,我打電話工具箱對象方法調用VS類方法調用。最佳實踐?

Class toolbox { 
    public function misc($var) { 
    return do_something($var); 
    } 
} 

我加載我的各種腳本里面的工具箱,然後用它,但我不知道最好的做法應該是什麼......

選項1:對象方法調用

__construct() { 
    require_once('toolbox.php'); 
    $this->ToolBox = new toolbox; 
} 

some_function($input){ 
    return $this->ToolBox->misc($input); 
} 

選項2:類方法調用

__construct() { 
    require_once('toolbox.php'); 
} 

some_function($input){ 
    return ToolBox::misc($input); 
} 

是否有某種最佳實踐?我不認爲我需要工具箱的各種實例。

+2

考慮把它們放在一個單獨的命名空間爲免費功能。 – DCoder

+0

@DCoder爲什麼你提供該解決方案作爲評論而不是答案? –

+1

@Homezar,可能是因爲他/她沒有瞄準廉價的聲譽。但是DCoder是完全正確的 - 隨機函數的最佳實踐是將它們放置在命名空間中。 –

回答

0

使它們成爲靜態函數。

class Toolbox { 
    static public function Tool1(){ 
    } 
} 
Toolbox::Tool1(); // Call the static method without instantiating the object 

爲什麼靜態類,而不是命名空間?

因爲靜態工具類傾向於增長並且往往很多。你可能有一個文件,字符串,數組,等等。他們每個人都可以輕鬆地跳5K行甚至更多。 但你總是使用它們嗎?不!它們可能會在您網站的5%的頁面中使用。那麼爲什麼把他們包括在第一位呢?

PHP's Autoload^來我們這裏援助。但是自動加載只能與類一起使用,而命名空間必須包含。你現在三種選擇:

  • include/require一切,所以你要確保你的命名空間始終可以訪問,但你強迫PHP解析了很多在每次運行時文件的再加上你的固有的性能損失,實際上including/requiring文件
  • 你保持include_once/require_once每個.php文件,你用你的實用工具類
  • 使用spl_autoload_register和忘記的依賴,而磁帶自動加載機繁重在後臺爲你

前兩個可以使用命名空間,而最後一個需要靜態類。當你的代碼基數增加時你開始欣賞autoload,無論別人告訴你什麼,你開始欣賞靜態類。所以:

best practices == guidelines && best practices != mandatory practices 
best practices != what works best in your specific scenario 

^了反對票現在準備 :)

相關問題