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

标签 php scope namespaces global-scope

假设您有一个全局 method() .

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

\\Namespace\Class::method();

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

本质上,您没有更改任何内容,并且该方法的所有意图和目的都与以前一样全局 - 您仍然可以从任何地方调用它,但您必须键入更多字符。我是否错过了一些令人尴尬的基本内容?

最佳答案

命名空间和类不仅可以帮助您区分代码并帮助您避免名称冲突,而且实际上可以通过使用 autoloaders 使其更快。并且只在你需要的时候加载你需要的东西。

您不太可能像这样调用您的方法:

\\Namespace\Class::method();

您更有可能声明 use Namespace\Class文件顶部的语句,然后执行 Class::method(); .

更有可能(而且可能更好),您实际上会实例化一个真实的对象,而不是使用静态方法(这很方便,但确实会破坏封装)。在您的示例中,您使用的是静态方法,对于很多人来说,它并不是特别面向对象。

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

但要有意义,差异必须不仅仅是表面上的。如果您正在使用类和对象,请继续阅读 SOLID原则和design patterns (一次一点)并拥抱 OOP 的优势.

关于php - 全局函数和将这样的函数包装到命名空间类中有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468259/

相关文章:

php - 如何在 PHP 中检测包含 mysql_query 字符串的字符串变量?

ios - 使用常用方法创建类

c++ - 我分配了一个指针,它自己清空了

python - Xpath for ElementTree 引用 XML 和命名空间用于英国法规元数据

backbone.js - 加载多个 requireJS 和 Backbone 实例

javascript - 通过jquery提交(smarty)

php - 如何从 session 数组中获取特定值?

php - Codeigniter Autoload 类在 ubuntu 中不起作用

c# - ASP.NET C# 作用域问题

python - Spacy 模块名称是关键字