正反博弈 PHP命名空间真的槽糕吗?

开发 后端 前端
命名空间对于C#和Java开发者而言都不是新事物了,而对于PHP来讲,直到PHP 5.3中“命名空间”才被引入,“命名空间”的加入将使得PHP开发者可以更好的改变PHP程序结构,解决命名冲突等问题。

在PHP 5.3中,最重要的一个新特性就是对命名空间引入,在此之前,PHP开发者对于PHP中命名空间的实现,已经变得异常的渴望。当PHP应用开始变得巨大,并且更加复杂的时候,命名空间是解决代码冲突的必要手段。

51CTO相关文章推荐:PHP命名空间规则解析及高级功能

批评者:混乱的PHP

像C#和Java这些语言,是被设计和遵循严格的语法标准的。PHP是演化的。最早的版本发布于1995年,版本号3,是面向过程的语言。PHP 4包含了最基本的面向对象,而PHP 5提供了合适的标准OOP模型,命名空间在版本PHP 5.3中被加入其中。

PHP

PHP批评者声明说这个语言是混乱的。函数名不一致(例如strpos,str_split,substr),对象处理是无用的,还有一些语法同其他语言相比,不是极其怪诞,就是异乎寻常。然而,PHP仍然保持着使用最广泛的服务器端开发语言的头把交易。它的才华主要在下面的长处:

◆初学者可以从简单的面向过程编程开始。

◆他们无须触及OOP技术仍然可以有所见数

10年前为PHP 3编写的代码仍然可以运行在PHP 5.3下。可能需要一些微小的调整,但是很少需要大量重写。PHP代码可能并不总是可爱的、有逻辑的或者优雅的,但是相比其他选择它的开发总是快捷和容易被理解的。

PHP命名空间的实现

不像C#和Java,PHP不得不保持没有名字空间的代码的兼容性。这个已经被实现,你可以选择使用或者不使用命名空间。然而,如果你使用PHP 5.3或更高版本,我推荐使用命名空间,即使你在项目中只使用相同的名字。

使用namespace和use作为命名空间操作符看起来很有逻辑。一些开发者可能不同意,但是在这种情况下它们如何命名其实并不重要。***,回到反斜杠的问题上。多数批评者人为这是丑陋的,难以阅读,并且在Mac上难以输入。即便如此,我仍然认为它比曾经提议过的两个冒号要好。例如下面的静态方法调用:

  1. // PHP 5.3 beta版静态方法调用  
  2. echo ::App::Lib1::MyClass::WhoAmI();  
  3. // PHP 5.3正式版静态方法调用  
  4. echo \App\Lib1\MyClass::WhoAmI(); 

第二行可以被快速录入,更少的错误可能,容易阅读,并且容易理解。如果你在字符串之外看到反斜杠,你就知道那一定存在命名空间。

当然,如果PHP使用“.”作为公共方法、静态方法和命名空间会更好。这样可以同Java、C#、JavaScript、Python和许多其他语言一致起来。不幸的是PHP的历史和向下兼容让这一切难以实现。

没有语言是***的,而PHP更加不会是***语言中的一员。无论如何,命名空间已经被很好的实现,特别是考虑到它可能产生的限制和问题。

文章作者通过分析PHP命名空间的实现,来反击那些PHP反对者的声音,您是否了解PHP的命名空间为什么是这样的呢?PHP的命名空间真的就那么槽糕吗?作为PHP开发者,您是如何认为的呢?

原文作者:Craig Buckler

英文原文地址:http://www.sitepoint.com/blogs/2009/08/13/are-php-namespaces-bad/

【编辑推荐】

  1. PHP命名空间规则解析及高级功能
  2. PHP 5.3中的命名空间:你用过了么?
  3. PHP 5.3中的命名空间使用方法浅述 
责任编辑:王晓东 来源: sitepoint
相关推荐

2021-10-15 10:27:42

变量命名

2009-08-25 10:58:41

PHP命名空间

2009-07-20 10:18:49

PHP 5.3命名空间

2009-07-01 09:32:11

PHP 5.3.0

2009-07-17 09:31:06

PHP 5.3命名空间

2009-08-27 15:34:38

C#命名空间

2009-08-12 10:46:54

C#命名空间

2009-08-28 13:56:25

C#反射命名空间

2013-08-21 16:48:42

.Net命名空间

2009-09-11 09:22:14

System.Linq

2011-05-20 14:54:46

ADO.NET命名空间

2010-01-15 10:47:15

VB.NET命名空间

2011-05-20 14:54:46

ADO.NET

2011-06-09 15:27:01

JavaScript

2020-07-13 07:00:21

Kubernetes

2009-07-16 15:02:33

Shapes命名空间Net Micro F

2014-04-28 09:56:56

Objective-CiOS命名空间

2009-11-18 16:58:55

PHP命名规则

2010-08-06 10:41:59

Flex命名空间

2009-08-21 13:34:32

C# System.I
点赞
收藏

51CTO技术栈公众号