全局辅助函数是否应该命名空间?
Should global helper functions be namespaced?
假设我有一些辅助函数,例如 a̶r̶r̶a̶y̶_̶r̶e̶d̶u̶c̶e̶ 'array_operation'.
我应该在全局命名空间中声明此函数并将其与核心 array_*
函数一起使用,还是应该在供应商特定的命名空间下使用它,例如 use function Vendor\Helpers\Arrays\array_operation;
全局命名空间的唯一缺点是它可能不清楚函数的声明位置,但这也意味着您不需要显式 use
无论何时要使用该函数。
哪种做法更好?
命名空间代码的原因是为了避免与其他供应商的代码发生命名冲突。对于 类 和函数或常量(或变量,但没有人使用全局变量,riiiight?)同样可能发生这种情况。您的函数是 "helper functions" 这一事实无关紧要,它们仍然是函数。实际上,"helper functions" 往往具有相当通用的名称,因此更可能与其他名称发生冲突。所以:是的,命名它们。
实际上,如果可行的话,您可能会考虑将它们作为一个完全独立的包进行维护。在这个类别中,我个人最喜欢的一个是 Functional PHP,一个非常好的 "helper functions" 包,所有这些都以提供功能基元为前提。
假设我有一些辅助函数,例如 a̶r̶r̶a̶y̶_̶r̶e̶d̶u̶c̶e̶ 'array_operation'.
我应该在全局命名空间中声明此函数并将其与核心 array_*
函数一起使用,还是应该在供应商特定的命名空间下使用它,例如 use function Vendor\Helpers\Arrays\array_operation;
全局命名空间的唯一缺点是它可能不清楚函数的声明位置,但这也意味着您不需要显式 use
无论何时要使用该函数。
哪种做法更好?
命名空间代码的原因是为了避免与其他供应商的代码发生命名冲突。对于 类 和函数或常量(或变量,但没有人使用全局变量,riiiight?)同样可能发生这种情况。您的函数是 "helper functions" 这一事实无关紧要,它们仍然是函数。实际上,"helper functions" 往往具有相当通用的名称,因此更可能与其他名称发生冲突。所以:是的,命名它们。
实际上,如果可行的话,您可能会考虑将它们作为一个完全独立的包进行维护。在这个类别中,我个人最喜欢的一个是 Functional PHP,一个非常好的 "helper functions" 包,所有这些都以提供功能基元为前提。