1

我正在用 PHP 编写一个应用程序,我在一个名为 toolbox 的类中收集了一系列杂项函数

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

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

4

1 回答 1

0

使它们成为静态函数。

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

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

因为静态实用程序类往往会增长并且往往很多。您可能有一个用于filesstringsarrays等。它们中的每一个都可以轻松地跳过 5K 行甚至更多。但你总是使用它们吗?不!它们可能会在您网站上 5% 的页面中使用。那么为什么首先包括它们呢?

PHP 的 Autoload^ 在这里帮助我们。但自动加载仅适用于类,而必须包含命名空间。你现在有三个选择:

  • you include/ requireEVERYTHING 所以你确保你的命名空间总是可以访问的,但是你强制 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

^现在准备投反对票:)

于 2013-07-05T16:59:55.663 回答