PHP比你想象的好得多


Posted in PHP onNovember 27, 2014

有很多对于PHP的抱怨,甚至这些抱怨也出自很多聪明的人。当Jeff Atwood写下对于PHP的另一篇抱怨文章之后,我思考了下PHP的好的方面。

这些抱怨最大的问题是他们出自很多仍在使用旧版本PHP的人。他们或许是不愿意关心或许是不愿意承认PHP不管在语言层面还是在社区层面都在以很快的速度演变。实际上它比任何其他语言或者web平台都演变的快。尽管并不总是如此,但是过去的五年PHP经历了一个惊人的历程。

在说最近PHP社区取得的惊人成就之前,我们先来看看一些有趣的数字:PHP被77.9%的服务端编程语言已知的网站使用。Wordpress被全世界16.6%的网站使用。使用率最高的三个CMS建站系统是:第一的Wordpress份额为54.3%,第二的Joomla份额为9.2%,第三的Drupal份额为6.8%。这三个产品都是用PHP写的。

PHP一定做了一些正确的事,不是吗?

现在,我来告诉你吧,PHP的绝技在于:尽管经过了这么多年的变化,PHP对于非技术人员依然是最容易学习的语言,它让人可以比其他技术更快地建立动态网站,也让人没有麻烦地托管网站。PHP可能不是这个世界上设计最好的语言,但是它能让你完成事情(get things done),这一点是毋庸置疑的。

 

PHP语言

PHP5.0(2004年发布)带来了很实用的对象模型…等等,我在说8年前发布的东西。快进到现在的PHP5.4,即PHP最近的版本,带来了对于现代web语言你梦寐以求的东西:是的,PHP支持了命名空间(namespaces);是的,PHP支持闭包(closure);是的,PHP支持traits。

尽管需要花费一些时间,但是PHP5.4带来了一些语法糖使得整体体验比以往更好:是的,PHP支持用[ ]定义数组;是的,PHP支持新创建的对象这样调用函数:(new Foo())->bar();是的,PHP支持数组这样获取元素:$foo->bar()[1]。

PHP甚至向它自己曾犯过的错误学习:register_globals 和 magic_quotes被彻底删除了。

PHP有了内置web服务器以方便本地测试,它能以微秒级的速度启动。

接下来的挑战:我们怎样更新在网络上的讲解PHP的教程?在PHP程序中最好的支持WebSocket的技术是什么?

PHP生态系统

拥有一个好的语言是很好的,但是拥有一个好的生态系统更棒。在过去的几年PHP生态系统演变了很多。

Git

对于Git我不想讨论太多,Git被到处使用,PHP很快拥抱了Git。几乎所有PHP类库、框架和产品都在使用Git,包括PHP本身。

Composer

两年前,我想去掉我在symfony 1中hack的丑陋PEAR代码以支持插件。我想替换成能管理项目依赖的东西,而不是一个像PEAR一样的整体的安装,所以我试着寻找能管理软件依赖的最佳的算法。我几乎尝试了所有可能:从Perl到Ruby,从Debian到Redhat。结果没有让我满意的,只有我自己的解决方案恰巧能工作…当然这只是我的经验只谈。之后我偶然发现了ZYpp,就是它了。ZYpp使用布尔可满足性问题解来管理依赖。多亏了Nils Adermann和Jordi Boggiano的辛苦工作,PHP现在有了做好的管理依赖的工具?Composer。

是的,PHP比其他语言有了更好的依赖管理工具。

由于有了Git,Composer,和PHP内置web服务器,我们更容易下载/测试/安装一个PHP项目。

想测试Symfony(使用PHP5.4)?

$ composer.phar create-project symfony/framework-standard-edition

$ cd framework-standard-edition

$ ./app/console server:run

想测试Silex?

$ composer.phar create-project fabpot/silex-skeleton

$ cd silex-skeleton

$ php -S localhost:8888 -t web/

还不知道Composer?你应该了解下它了。

浏览下主要的Composer仓库Packagist,它已经拥有1900多个包,且它们在不到三个月的时间里被安装了上百万次。

接下来的挑战:在下一个PHP版本里内置Composer?

合作

社区合作是本文说的重点,也是我最引以为豪的地方。我们开始看到PHP项目中更好的合作,甚至大项目也是如此,大到你可以忽略其他项目了。

phpBB,Drupal,ez Publish,Symfony,和很多其他项目(比如phpDocumentor, PHPUnit, Behat, Zikula, Propel, Doctrine, Midgard等等)都在共享代码。是的,他们彼此是竞争者,但是他们都理解彼此合作是很重要的。Composer能很好地促进这种合作。

接下来的挑战:说服更多的项目加入这个趋势中来。

结论

让我再重申一次,PHP可能不是最好的编程语言,我也是第一个说出它的怪处的,但是PHP是迄今为止最好的web平台。

译自:PHP is much better than you think

PHP 相关文章推荐
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
Jun 21 PHP
深入探讨PHP中的内存管理问题
Aug 31 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
php插入mysql数据返回id的方法
May 31 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
php pdo连接数据库操作示例
Nov 18 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 #PHP
几个实用的PHP内置函数使用指南
Nov 27 #PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 #PHP
浅谈php优化需要注意的地方
Nov 27 #PHP
PHP实现文件下载详解
Nov 27 #PHP
thinkphp的URL路由规则与配置实例
Nov 26 #PHP
thinkphp文件引用与分支结构用法实例
Nov 26 #PHP
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JS获取时间的方法
2015/01/21 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
js+css实现打字效果
2020/06/24 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
Python实现全排列的打印
2018/08/18 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
django配置app中的静态文件步骤
2020/03/27 Python
python批量生成条形码的示例
2020/10/10 Python
python 制作本地应用搜索工具
2021/02/27 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
超市促销实习自我鉴定
2013/09/23 职场文书
领导欢送会主持词
2015/07/06 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技