最好的web编程语言?

王志勇 发表于 2019年01月08日 16:01

前几天看到v2ex的一个老生常谈的话题,我挺欣慰的是超过半数的网友都给PHP投票,PHP曾被誉为“Web之王”。我从事了10年的PHP编程,在这之前的7年主要做ASP编程,今天我会给PHP投一票,仍然是我心中最好的web编程语言之一。因为在很多人眼里,哪一种语言的工资最高、哪一种语言最牛就是最好的语言。但在多年的实战者里,PHP却是很多人的最佳选择。

曾有人吐槽PHP使用花括号、条件语句中使用圆括号、变量名使用美元符号$,所以有人更喜欢Python的语法。个人觉得,PHP的花括号、条件语句中的圆括号,可能有点难省略,一旦省略,PHP的解释器将比较难设计这门语言。尤其是花括号,在复杂的大片的程序语句里,如果有很复杂的逻辑关联,如果该语言没有花括号,易读性大减。大片的程序语句里,花括号有助于分析程序里的逻辑关系,所以易读性大为提高。

例如这2个例子:

if (file_exists($f)) for ($i=0;$i<=$j;$i++){}

foreach ($a as $b1=>$b2) echo "$b1, $b2";

如果把if后面的圆括号、for、foreach后面的圆括号去掉之后是这样的:

if file_exists($f) for $i=0;$i<=$j;$i++;{}

foreach $a as $b1=>$b2 echo "$b1, $b2";

这看起来,是不是有点像shell编程?但又不太像,因为shell必须用fi;结束,shell是用fi;来代替花括号。易读性,还是远不如花括号明显。

PHP每个变量名都是美元符号,这个我赞同在未来的PHP版本改进中,去掉美元符号$(建议有、无美元符号,都可兼容)。为什么会有美元符号$?也许是当时的PHP语言的设计者,为了便于查找变量。但是现在有很多文本工具,都支持程序语句自动显示为彩色,例如EmEditor。而且EmEditor还支持“仅搜寻单字”,这样能快速找到变量,即使变量名是a,按Ctrl+F,在“仅搜寻单字”打上勾,也能快速找到所有的变量a。

前几天看到一种语言,花括号必须占用一行,否则报错。PHP不存在这种强制。为了提高程序的可读性,我喜欢把关联性强的语句,最后的花括号不换行。比如我写的程序里,在最后结束的地方,会有很多这种格式:

……
……
…… }}}
}

上述的前3个右括号,表示关联性最强。最后回行的这个右括号,表示它是在更外一层的命令语句。

上面讨论了语法,PHP的语句很多时候也很简洁。比如实现同样功能的建立文件夹,PHP这样实现:

$a1='folder';if (!is_dir($a1)) mkdir($a1);

或者更简单地:

@mkdir('folder');

ASP建立一个文件夹需要这些语句:
<%a1=server.mappath("folder")
Set im=CreateObject("Scripting.FileSystemObject")
if im.FolderExists(a1)=False then im.CreateFolder(a1)
set im=nothing%>

这就是同一时期的PHP和ASP的区别。由于ASP的语句比PHP复杂很多,所以ASP的开发周期至少是PHP的2~3倍。ASP是不是一个落后的语言?ASP有它特定的历史作用,因为PHP在近10年广泛流行之前,ASP几乎就是最好的语言。我有一个2006年微软官方网站的截图,当时微软官方网站的大部分网页就是ASP做的,之后的几年渐渐改成asp.net。

新兴的高并发语言Golang,有人测试性能比PHP高出很多。也许几年后,等我有时间,会尝试学习和开发Golang语言。

3条评论:
1   青山 2019-01-11 16:49
我学c++只学会了输出hello world。
2   技术 2019-05-31 11:13
为何您的网页地址都是jsp结尾?这个博客不是php的吗?

自由勇 2019-05-31 11:14
因为以前是JSP,现在是PHP。为了让链接保持不变,所以暂时没有改过来。

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

王志勇:1980-09-26 (40周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2020年10月
2020年09月(14)
2020年08月(14)
2020年07月(14)
2020年06月(16)
2020年05月(13)
2020年04月(18)
2020年03月(14)
2020年02月(15)
2020年01月(16)
2019年12月(11)
2019年11月(26)
2019年10月(25)
2019年09月(30)
2019年08月(10)
2019年07月(29)
2019年06月(30)
2019年05月(26)
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2020 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue