全局函数和将此类函数包装到命名空间 class 之间有什么区别吗?
Is there any difference between a global function and wrapping such function into a namespaced class?
假设您有一个全局 method()
。
您可以将它移动到命名空间和 class 中,然后将其命名为
\Namespace\Class::method();
有什么不同吗?一个比另一个好吗?
基本上您没有做任何更改,该方法与以前一样适用于所有意图和目的 - 您仍然可以从任何地方调用它,但您必须输入更多字符。我是不是错过了一些令人尴尬的基本知识?
命名空间和 classes 不仅可以帮助您对代码进行分区并帮助您避免名称冲突,而且实际上可以通过使用 autoloaders 并仅加载您需要的内容来加快速度需要的时候需要。
你不太可能这样调用你的方法:
\Namespace\Class::method();
您更有可能在文件顶部声明 use Namespace\Class
语句,然后执行 Class::method();
.
而且更有可能(而且很可能更好)您实际上会实例化一个真实的对象,而不是使用静态方法(这很方便,但确实会破坏封装)。在您的示例中,您使用的是静态方法,对于很多人来说并不是特别面向对象。
在功能上,孤立地考虑,方法和函数之间没有真正的区别。但是一个方法可以访问class属性和私有方法,因此它进一步帮助您构建一个职责适当分配的系统。
但要有意义,差异必须不仅仅是表面上的。如果您正在使用 classes 和对象,请继续阅读 SOLID principles and design patterns (a bit at a time) and embrace the advantages of OOP。
假设您有一个全局 method()
。
您可以将它移动到命名空间和 class 中,然后将其命名为
\Namespace\Class::method();
有什么不同吗?一个比另一个好吗?
基本上您没有做任何更改,该方法与以前一样适用于所有意图和目的 - 您仍然可以从任何地方调用它,但您必须输入更多字符。我是不是错过了一些令人尴尬的基本知识?
命名空间和 classes 不仅可以帮助您对代码进行分区并帮助您避免名称冲突,而且实际上可以通过使用 autoloaders 并仅加载您需要的内容来加快速度需要的时候需要。
你不太可能这样调用你的方法:
\Namespace\Class::method();
您更有可能在文件顶部声明 use Namespace\Class
语句,然后执行 Class::method();
.
而且更有可能(而且很可能更好)您实际上会实例化一个真实的对象,而不是使用静态方法(这很方便,但确实会破坏封装)。在您的示例中,您使用的是静态方法,对于很多人来说并不是特别面向对象。
在功能上,孤立地考虑,方法和函数之间没有真正的区别。但是一个方法可以访问class属性和私有方法,因此它进一步帮助您构建一个职责适当分配的系统。
但要有意义,差异必须不仅仅是表面上的。如果您正在使用 classes 和对象,请继续阅读 SOLID principles and design patterns (a bit at a time) and embrace the advantages of OOP。