Object方法调用VS类方法调用。最佳实践?

时间:2013-07-05 16:50:53

标签: php oop

我正在用PHP编写应用程序,我在一个类中收集了一些杂项函数,我称之为工具箱

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);
}

是否有某种最佳做法?我认为我不需要工具箱的各种实例。

1 个答案:

答案 0 :(得分: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在每次运行时解析很多文件加上你得到实际的{{1 } / including文件
  • 您在使用实用程序类的每个requiring文件中保留include_once / require_once
  • 你使用.php并忘记了依赖关系,而自动加载器在后台为你做了繁重的工作

前两个可以使用命名空间,而最后一个需要静态类。当您的代码库增长很多时,您开始欣赏spl_autoload_register并开始欣赏静态类,无论其他人告诉您什么。所以:

autoload

^ 现在准备负面投票:)