全局函数和将这样的函数包装到命名空间类之间有什么区别吗?

时间:2017-01-04 16:05:02

标签: php scope namespaces global-scope

假设您有一个全局method()

您可以将其移动到命名空间和类中,并将其称为

\\Namespace\Class::method();

有什么区别吗?一个比另一个好吗?

基本上你没有改变任何东西,这个方法对于所有意图和目的都像以前一样全局 - 你仍然可以从任何地方调用它,但你必须输入更多的字符。我是否想念一些令人尴尬的基本内容?

1 个答案:

答案 0 :(得分:1)

命名空间和类不仅可以帮助您对代码进行分区,还可以帮助您避免名称冲突,但实际上可以通过使用autoloaders并在需要时加载所需内容来加快速度。< / p>

你不太可能像这样打电话给你的方法:

\\Namespace\Class::method();

您更有可能在文件顶部声明use Namespace\Class语句,只需执行Class::method();

甚至更可能(并且可能更好)你实际上实例化一个真实对象而不是使用静态方法(这很方便,但可以真正打破封装)。在您的示例中,您使用的是静态方法,对于很多人而言,这种方法并不是特别面向对象的。

在功能上,单独考虑,方法和函数之间没有真正的区别。但是一个方法可以访问类属性和私有方法,因此它可以帮助您构建一个正确分配职责的系统。

但要有意义,差异必须不仅仅是装饰性的。如果您正在使用类和对象,请阅读SOLID原则和design patterns(一次一点)并接受OOP的优势。