2009 年 09 月

浏览模式: 标准 | 列表 | 图文
PHP的命名空间真这么糟糕么?

PHP的命名空间真这么糟糕么?

PHP的命名空间啊。被很多人所诟病,理由就是那个反斜杠。被当成转义符的反斜杠承担起了命名空间的重任。可想而知,他承受的压力有多大。。。

还好,还是有人在支持的,以下就是一篇支持文章,翻译过的。翻译人当然不是我,我要会翻译也就不写程序了。去翻译点文章忽悠人了。

原文如下,来自于:http://www.mikespook.com/index.php/archives/394

几年前(大约应该在02-03年之间,也就是php5刚出来那会)曾经跟朋友讨论过一次关于php的命名空间的问题。当时觉得,php要是能有命名空间,那是多完美的事情啊。
如今,php5.3已经包含了命名空间。但是似乎并没有当年的那种感慨了。大约是旧的系统要迁移,新的系统要重新设计,这个名字空间都有点鸡肋的感觉。看来还要习惯一下才好。
看到这篇文章,觉得说得是有点对的。也不长,就随手翻译出来。翻译后的感觉:作者 超级喜欢使用“However”。
能说明两个问题:

  1. php本身为什么是这样
  2. php的名字空间为什么是这样

作者:Craig Buckler
原文:http://www.sitepoint.com/blogs/2009/08/13/are-php-namespaces-bad/
207ce891440a9ad60d2de6d6a9a47aeb

PHP开发者对于PHP中命名空间的实现,已经变得异常的渴望。当PHP应用开始变得巨大,并且更加复杂的时候,命名空间是解决代码冲突的必要手段。
我最近的一些指南收到了大量关于PHP的命名空间实现的评论。问题主要集中在语法和反斜杠上面。在解决这些问题之前,让我们先来快速回顾一下PHP的历史。

混乱的PHP

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

PHP批评者声明说这个语言是混乱的。函数名不一致(例如strpos,str_split,substr),对象处理是无用的,还有一些语法同其他语言相比,不是极其怪诞,就是异乎寻常。

然而,PHP仍然保持着使用最广泛的服务器端开发语言的头把交椅。它的才华主要在下面的长处:

  • 初学者可以从简单的面向过程编程开始。他们无须触及OOP技术仍然可以有所见数。
  • 10年前为PHP 3编写的代码仍然可以运行在PHP 5.3下。可能需要一些微小的调整,但是很少需要大量重写。

PHP代码可能并不总是可爱的、有逻辑的或者优雅的,但是相比其他选择它的开发总是快捷和容易被理解的。

PHP命名空间的实现

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

使用namespace和use作为命名空间操作符看起来很有逻辑。一些开发者可能不同意,但是在这种情况下它们如何命名其实并不重要。

最后,回到反斜杠的问题上。多数批评者人为这是丑陋的,难以阅读,并且在Mac上难以输入。即便如此,我仍然认为它比曾经提议过的两个冒号要好。例如下面的静态方法调用:

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

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

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

没有语言是完美的,而PHP更加不会是完美语言中的一员。无论如何,命名空间已经被很好的实现,特别是考虑到它可能产生的限制和问题。我相信你一定会学习并且着迷那个反斜杠的。

相关阅读:

ucapi手册

ucapi手册

搜索ucenter的手册时,发现了ucapi.com网站,上面已经有一些内容了,什么使用手册,官方API,官方例程之类的。
以前下载的都是离线版的chm文件 ,经常会在硬盘里找不到。现在有一个在线版的。方便很多。查起来也很容易

呵呵。也算是推荐一下了。。
如果是用comsenz系统的人,估计都会用到ucenter吧。那么ucapi这样的东西就必须要看了

清除广告代码,为更换博客系统做准备

清除广告代码,为更换博客系统做准备

sablog确实不错。但我的资源耗费相对来说其实并不厉害。所以我想更换到wordpress看看。
当然,等手头的任务完成后换。

当然,可能会象帕兰映像那样,开始搞WP模版并出售(不是我搞,我只提供一个展示的平台)

更改的另一个原因是,我现在的分类有点乱,有些文章我都不知道放在哪个分类下面,改版时我要仔细规划一下。

google notebook。。。

google notebook。。。

在很久前,google notebook还是我有点喜欢的一个小功能,方便(有点方便啦)。然而等到ff升级到3。5后就再不支持了。
郁闷啊。

网上也看了很多文章,都是说要改xpi文件里的内容,他们是这么说的:

首先下载google-notebook.xpi插件包

wget http://dl.google.com/firefox/google-notebook.xpi

将其解压,编辑install.rdf文件

修改第14行 <em:maxVersion>3.0.*</em:maxVersion>

将版本号3.0.*改为3.5.*甚至3.6.*

然后保存,再进行打包,将其重命名为google-notebook.xpi

再在Firefox中打开文件中选中打包后的google-notebook.xpi,接下来的事情就同正常的安装插件一样步骤了

2009.7.11号更新:如上方法最为简便的就是直接用解压缩程序打开然后再双击install.rdf选用记事本(windows)或者gedit(Linux)打开,编辑完成后保存关闭,此时解压缩程序检测到源文件改变自然会提示是否更新,选择是即可。但在Linux下可能需要解决权限问题方可采用此法 (此方法可行性较小,建议直接解压)

2009年8月10号更新:当前Google貌似修改了原xpi文件,进行了一些检测机制,所以在打包之前记得将 META-INF 文件夹删除

还有人说,直接安装Nightly Tester Tools就可以了,因为这个插件可以帮忙强制安装。下载地址为: https://addons.mozilla.org/en-US/firefox/addon/6543

试试吧?

旁注:原来,NTT就是可以自定义一些FF的属性,比如版本号啥的。这样可以让插件以为你现在的平台是3.0以前,所以就能够安装了。。。果然狠