PHP中命名空间的好处是什么?

时间:2011-03-22 14:52:26

标签: php namespaces

PHP中命名空间的好处是什么?我曾经研究过多个MVC系统,并没有找到太多用途。我在这里读到他们......这是我从未使用过的问题吗?这是一种总是使用的良好编码标准吗?

6 个答案:

答案 0 :(得分:7)

与任何其他语言一样,名称空间允许具有相同名称的ambigious名称/类在两个不同的名称空间中共存。

例如Table类可以引用持久数据库和HTML表中的表。我可以将名称空间专门用于我想要的确切表格,分别是\Model\Table\View\Table

答案 1 :(得分:6)

命名空间是良好的OOP实践的一部分。它们在大型Web应用程序中非常有用,因为它们有助于避免类之间的歧义。这是一种组织应用程序并使其更具可读性的方法。

答案 2 :(得分:6)

命名空间的主要优点通常不是来自您自己的应用程序的代码,而是来自第三方库。库维护人员可以为自己的代码选择合适的命名空间,并确保与您自己的代码没有命名冲突。

答案 3 :(得分:3)

它可以帮助您避免名称冲突。例如,如果你有两个包,并且每个包都有一个名为Client的类(或类似的通用类),那么它将导致名称冲突。在PHP 5.3之前,避免这些冲突的解决方案是使用如下类名:VendorName_PackageName_Classname

你可以看到它并不太好。但现在使用PHP 5.3,您可以使用命名空间来提供更清晰的类名。

答案 4 :(得分:3)

想象一下,你拥有庞大的代码库,拥有数千个函数,类和许多第三方代码。现在,两个函数碰巧具有相同的名称。

这就是名称空间的来源 - 通过将代码包装到名称空间中,可以消除名称冲突的可能性。

此外,命名空间可以帮助您构建代码 - 属于某个特性或子系统的所有内容都会进入一个命名空间。

答案 5 :(得分:0)

它还可以帮助您的代码更灵活,更清晰。 在比较中,Zend_Database_Adapter_Mysql与Zend / Database / Adapter / Mysql等同于避免使用暧昧的名字。

 // use namespace
 use Zend/Database/Adapter/Mysql as DbAdapter;
 $dbAdapter = new DbAdapter;

 // use naming convention    
 $dbAdapter = new Zend/Database/Adapter/Mysql;

使用命名空间时,如果更改了适配器,则代码不会被修改太多。所有操作仅修改'使用'命令。 请注意,在示例中,不应该关注工厂方法模式。