您的位置:首页 > 编程语言 > Python开发

Python vs. PHP

2010-12-08 23:15 246 查看
原文见于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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: