对象方法调用VS类的方法调用。 最佳实践? [关闭](Object method call V

2019-10-18 08:05发布

我写在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);
}

是否有某种关于最佳实践的? 我不认为我需要的工具箱中的各种实例。

Answer 1:

让他们静态函数。

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

为什么静态类,而不是命名空间?

因为静态实用类倾向于成长,往往是很多。 你可能有一个文件字符串数组 ,...等等。他们每个人都可以很容易地跳5K线,甚至更多。 但你总是使用它们? 没有! 他们可能会在您网站上的网页的5%被使用。 那么,为什么它们包括在首位?

PHP的自动加载^ 来到我们的援助在这里 。 但是, 仅自动加载带班工作 ,而命名空间已被包括在内 。 现在,您有三种选择:

  • 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

^ 现在投了反对票准备 :)



文章来源: Object method call VS class method call. Best practice? [closed]
标签: php oop