Home  >  Article  >  Backend Development  >  正反博弈 PHP命名空间真的槽糕吗?_PHP

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

WBOY
WBOYOriginal
2016-06-01 12:20:27753browse

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

bitsCN相关文章推荐: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/

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn