原文见于Python vs. PHP
Python与PHP的共同之处:
1. 都是解释型的,它们都是有动态类型的高级语言(动态语言)。
2. 都是开源的,(当然,要除掉Zend的几个产品)。
3. 都有大量开发者社区来支持。
4. 都易学,比Java容易学,甚至比Perl都容易学。
5. 都易扩展,用C,C++,Java都可以对它们扩展
6. 都有很好的兼容性,它们不用重新编译,就可以运行在目前几乎所有的平台上。
7. 它们的函数都支持可变参数个数。
8. 都能将活动对象冻结成字符串(译者注:也就是序列化功能)(这样就可以实现外排序以及将对象通过网络迁移等功能),然后,这些对象又能完整无缺的被转换成一模一样的对象。PHP的serialize函数,Python的pickle、marshal模块就是用来实现这个特性的。请注意,由于PHP缺少模块,它处理对象和类的序列化能力要比Python弱很多。在PHP中,当一个对象被序列化时,只有它的属性被序列化了,而function没有被序列化,因此,在反序列化的时候,对象的类要和原来脚本中的类一样(名字要一样)。而在Python中,这个问题通过module/import框架自动解决了。(this COULD be handled with PHP 5's autoload(), but is not done automatically)
PHP有的,而Python没有的有哪些呢?
1. 来自C和Perl的语法,大括号,$符号
2. “switch”语句和‘do … while’结构
3. 递增递减操作符
4. 三元操作 (istrue ? a : b),我的文章《Python三目运算,and or陷阱》里讲了在Python中如何模拟实现
5. 让人精神分裂的戏剧化的函数名。内嵌库的命名方式多种多样。没有“命名空间”,所以函数名常常需要有个前缀来说明它的所属(但是事实上,常常没有前缀)。函数常常放到类里以模拟“命名空间”。PHP5.3中会加入“名字空间”,不过可惜PHP5.3还未出世。
6. 它是一个很随意的语言,所有的变量都没“set”为NULL,而且有点“弱类型”系统的样子(不要和“动态类型”混淆了)
7. 有个很有利的环境(因为通常境况下它都已经安装好了)。
8. 引用(‘$a = & $b’代表当$b改变的时候,$a也变了)。
9. 一个数组类型既可以同时作为list和dictionary。Dictionary的键值的按照原始顺序迭代。
10. 函数和属性的 private、protected、public。
11. 类和方法的abstract and final修饰
12. 接口
哪些又是Python中有,而PHP中没有的呢?
1. Python是通用编程语言(而不是只为Web开发设计)
2. 用缩进来标识程序块,而不是用大括号({})
3. 支持命名空间和模块
4. 小内核
5. 非常清晰、简明、直接的语法
6. 用docstrings和pydoc可以自己生成文档(PHP 5 有反射和doc strings)
7. 方法和函数的参数可以键值标识(f = open(filename='/abc.txt')),容易支持缺省参数
8. 真正的面向对象,一流的类和函数
反驳:面向对象在PHP5中已经完全修补好了
反反驳:但是仍然很痛苦,明显是乱搞
反驳:PHP 5 支持真正的PPP(private, public, protected),而Python不支持。在PHP中,开发者不需要将类方法的第一个参数设为self,因为可以显示的使用$this
9. 在标准库中广泛使用了类
反驳:PHP 5 有SPL,它是完全基于类的
10. 有明确的私有属性表示方法
反驳:PHP 5对方法和属性都支持PPP(private, public, protected)
11. 多重继承
反驳:PHP 5支持Trail,它更灵活,而却没有多重继承那么痛苦。我不认为多重继承是个好东西,Java也避免了这个特性
12. 面向对象的文件处理
13. 方法链
反驳:PHP5中,方法链在对象实例化时生成。它被称为fluent interface
14. 极好的自省支持
反驳:PHP 5 有反射
反反驳:我们说的是极好的自省
15. 所有的东西都是引用(PHP中引用是很痛苦的)
16. ‘del’语句对所有的东西通用,PHP中变量用‘unset’,数组成员用其他的
反驳:数组成员可以被 ‘unset()’
17. 大小写敏感(PHP的函数是不区分大小写的,但是变量却是区分大小写的)
18. 数组分割的语法很简答 (‘abc’[1:2] == 'b')
反驳:PHP的array_slice()方法还不够简单么?
19. lambda表达式
20. 迭代器(PHP 5中支持)
21. 结构化异常处理
反驳:在PHP5中有
反反驳:PHP中没有等价与else和finally的东西
22. 操作符重载
反驳:操作符重载是有害的,是语言不好的设计,在PHP中,可以使用runkit扩展来模拟这个特性
23. 集成SWIG
24. 多线程
25. 有非常好的profiler(用于跟踪代码的执行性能)
反驳:XDebug是个个调试和profiling扩展,支持PHP4和PHP5,它非常流行
26. 很多调试器和IDE
反驳:PHP有很早就有商业化的工具,Eclipse PDT是开源的 Netbeans PHP也是开源的
27. 多种高级数据类型(lists、tuples、dicts、mx.DateTimes, NumPy arrays, etc.)
28. 数组(lists)和相链数组associative arrays(Dictionary)区别对待
29. 编译的字节码被缓存
反驳:花$980就能从zend买到。XCache和EAccelarator都是开源的
30. 有标准的数据库API函数库
反驳:pecl.php.net/PDO -- PHP 5.1
31. 支持所有主流的GUI框架
反驳:PHP支持GTK和QT
32. 很强的全球化支持和Unicode支持
反驳:PHP6将包含对Unicode的支持。这个特性在PHP5.2和PHP5.3中通过intl扩展实现,在pecl.php.net中能找到这个模块
33. 成熟、稳定、向上兼容
反驳:PHP是稳定、成熟、向前向后兼容的
反反驳:。。。
作为网页开发框架的比较
PHP内核语言中直接内建有WEB开发的特性,不像PHP,Python的WEB开发能力是由扩展模块实现的。基本的CGI是通过Python的标准库里的‘cig’模块提供的。还有很多第三方模块,有些是对这个模块补充,其他的都是这个模块的竞争者。因此,Python提供了更灵活的WEB开发基础。
。。。to be continued。