今天看到Harry的Twitter上,Reply的一个链接,说“以前的PHP很烂”。这类的看的也不是一次两次了。虽然我不是什么高手,我还是忍不住说几句,PHP有那么烂么?
(所有代码测试环境: PHP 5.2.10)
规范不严格?
if($name == 'francis') { echo 'I am francis'; //标准括号形式 } if($name == 'francis'): echo 'I am francis'; //类似Python的缩进式 endif; if($name == 'francis') echo 'I am francis'; //单行也可以省略括号虽然这些代码很弱智,但是你可以用其中任何一个顺手的方式来写,执行的结果都是一样的,这到底是规范不严格还是自由灵活?
变量定义不严格?
$age = 20; $name = 'francis'; echo "I'm {$name} and {$age} years old.';字符串和整数变量就这样随意的加在一起了?的确不严格啊,但是不是更便于字符串输出?如果非要加一个变量类型,也不是不行。
$age = (Integer)$_GET['age']; $name = (String)$_GET['name']; echo "I'm {$name} and {$age} years old.";这样有什么意义,真搞不懂……
结构混乱?
$person = array(); $person['age'] = 20; $person['name'] = 'francis'; echo "I'm {$person['name']} and {$person['age']} years old.";这样是很乱,双引号套单引号,尖括号套方括号。当然,结构也不是不可以有:
class Person { private $age; private $name; public function __construct($age, $name) { $this->age = (Integer)$age; $this->name = (String)$name; } public function sayHello() { echo "I'm {$this->name} and {$this->age} years old."; } } $me = new Person(20, 'francis'); $me->sayHello();非要这样写,C/C++/Java的OOP狂人才觉得爽么?
运行效率低?
我应该不会写出一个要循环读取数据库上万次的程序,即使需要如此大量且高效的读写数据,我也会用本地文件作缓存的……
还有太多太多,不要随便说一个语言多么的烂。说他烂,是因为你不了解他。
唉,半夜失眠,一不小心又说了很多疯话,大家见谅……
老實說,我覺得你沒抓到重點。
如果你真的有仔細看我們舉出來的 PHP 的問題,就會發現你舉的例子都不是我們在說 PHP 爛的地方……
你舉的『爛』的例子在 Python / Ruby 中都是可以用,也被視為正常的。Ruby 幾乎中沒人在用強制轉型,associative array 也用得很兇,有時候比 class 還常用。
我們認為 PHP 『爛』的地方在於一些『地雷』,例如 magic quote,差勁的 charcter set 支援。
這些東西通常要自己踩到了才知道痛,而且,老實講,說 PHP 爛的大部份都不是 C++/Java 狂人……我們喜歡 Script 語言,但不覺得 PHP 是夠好的 Script 語言。
哈,感谢您能看完,然后客观的给我一个留言~
像MagicQuote和CharcterSet这类的地雷,我感觉不应该称之为地雷,反而叫做"Hack"比较好一些,因为总有一些小的问题是我们需要注意的。
比如我较为熟悉的AS3中,Date(Year, Month, Day)三个变量,唯独Month是从0开始计算……
PHP是有很多不足的地方,但作为一个开源项目,就像Linux一样,不足的地方太多了,但我们可以共同来维护他,使它变得越来越好玩,容易掌握。
C语言也有多种表现方式吧?
那种效率高就用哪个哈
看完完全一头雾水的说……
作为编程语言,实际上还是规范一点更好,太多兼容性会把程序员惯坏啦:)