2013-07-05 106 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 

^了反对票现在准备 :)

相关问题