我正在用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);
}
这方面有什么最佳实践吗?我不认为我需要工具箱的各种实例。
使它们成为静态函数
class Toolbox {
static public function Tool1(){
}
}
Toolbox::Tool1(); // Call the static method without instantiating the object
为什么是静态类而不是命名空间
因为静态实用程序类往往会增长,而且往往很多您可能有一个用于文件、字符串和数组。。。他们每个人都可以轻松地跳过5K线甚至更多但是你总是用它们吗否!它们可能会在你网站上5%的页面中使用。那么,为什么要把它们放在首位呢?
PHP的自动加载^在这里帮助了我们。但是自动加载仅适用于类,而命名空间必须包含在内。你现在有三个选择:
- 你
include
/require
所有的东西,所以你确保你的命名空间总是可以访问的,但你强迫PHP在每次运行时解析很多文件,加上你会得到实际including
/requiring
文件的固有性能损失 - 在使用实用程序类的每个
.php
文件中保留include_once
/require_once
- 当自动加载器在后台为您完成繁重的工作时,您使用
spl_autoload_register
并忘记依赖关系
前两个可以使用名称空间,而最后一个需要一个静态类。当你的代码库增长很多时,你就开始欣赏autoload
,并且无论别人告诉你什么,你都开始欣赏静态类。因此:
best practices == guidelines && best practices != mandatory practices
best practices != what works best in your specific scenario
^现在就为反对票做准备:)