最好的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。为了让链接保持不变,所以暂时没有改过来。

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

正文:

  记住信息?

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

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

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

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写