有很多对于 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 语言
PHP 5.0(2004年发布)带来了很实用的对象模型 … 等等,我在说 8 年前发布的东西。快进到现在的 PHP 5.4,即 PHP 最近的版本,带来了对于现代 web 语言你梦寐以求的东西:是的,PHP 支持了命名空间(namespaces);是的,PHP 支持闭包(closure);是的,PHP 支持 traits。
尽管需要花费一些时间,但是 PHP 5.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 平台。
相关推荐
实践中,你可能还需要处理更复杂的情况,如数据的动态生成、大量数据的优化处理等,这需要你深入学习phpspreadsheet的更多功能和API。记得在实际应用中,保持代码的可读性和维护性,遵循最佳实践。
例如,你可以通过`$mail->From`设置发件人邮箱,通过`$mail->Subject`设置邮件主题,通过`$mail->Body`添加邮件正文,通过`$mail->AddAttachment`添加附件。此外,还可以通过`$mail->Host`配置SMTP服务器,`$mail->...
PHP 基础实例 在HTML中嵌入PHP 使用 PHP 标记 PHP 语句 使用 PHP 注释 PHP 语句间的空格问题 添加动态内容 使用 PHP 函数 PHP nl2br()格式化输出 PHP 打印格式化输出 PHP 字符串的整理 PHP 改变字符串中字母的大小写...
总的来说,`phpWord`是一个功能强大的库,可以满足你在PHP项目中对Word文档的各种需求。只要合理使用其提供的API,就能高效地完成文件生成和内容替换任务。在实际开发中,记得结合错误处理和异常捕获,确保程序的...
php实现RS232串口通信 下载php_ser_5.2.0.zip 解冻把php_ser放到ext目录下, php.ini里加上: extension=php_ser.dll PHP code string ser_version( void ) void ser_open( string port, int baudrate, int databits, ...
5. pthreadGC2.dll:可能用于多线程支持,FFmpeg在处理多媒体数据时可能会用到多线程来提高性能。 6. avdevice-52.dll:处理特定输入/输出设备的库,比如摄像头或硬件编码器。 接下来,php_ffmpeg.dll是PHP与FFmpeg...
通过学习和实践,你可以掌握如何在Delphi中集成和使用PHP4DELPHI,从而实现更高效、更灵活的软件开发。 总的来说,Delphi与PHP的混合编程为开发者提供了一种创新的方式,结合两者的优势,可以创建出功能强大、适应...
支持 PHP 版本 (Thread Safe): 5.5.* x86 5.5.* x64 5.6.* x86 5.6.* x64 测试环境 Windows7 64bit PHP 5.5.35 TS x86 PHP 5.5.35 TS x64 PHP 5.6.21 TS x86 PHP 5.6.21 TS x64 将对应的版本 ...
在PHP扩展库中,`php_igbinary.dll`和`php_redis.dll`是两个非常重要的组件,它们分别用于增强PHP与特定数据存储系统的交互能力。接下来,我们将详细探讨这两个DLL文件以及它们所代表的扩展。 首先,我们来看`...
使用`chinese.php`可以轻松地在FPDF生成的PDF中包含中文内容,这对于创建多语言的PDF文档尤其有用,例如报表、证书、合同等。 总的来说,`chinese.php`是FPDF的一个关键组件,它使得在PHP环境中处理中文PDF变得更加...
要理解和使用MySQL,你需要了解如何创建数据库、表,插入、更新和删除数据,以及查询语言SQL的基础知识,如SELECT、INSERT、UPDATE、DELETE语句。 3. **PHP与MySQL的连接**:在PHP中,使用`mysqli`或`PDO`扩展来...
声明:本PHP-webshell仅供学习交流以及网站安全...网络上ASP的webshell很多,但是发现PHP webshell少了很多,好不容易找到这功能齐全的php版的webshell,给大家分享一下,省得大家到处找。顺便在这里赚点积分,呵呵。。
1. **系统要求**:确保你的Linux发行版(如Ubuntu、CentOS等)满足PHP 5.4.7的运行需求,通常需要GCC编译器和其他依赖库。 2. **安装过程**: - 更新系统软件包:`sudo apt-get update`(Ubuntu)或`yum update`...
例如,你可以创建一个PHP文件,如`insert.php`来处理数据插入,`update.php`和`delete.php`分别处理更新和删除,而`select.php`则用于获取数据。 **MySQL**: MySQL是流行的开源关系型数据库管理系统,用于存储和...
请确保下载的DLL文件与你的PHP环境匹配,即是否启用线程安全以及PHP的架构(如x86或x64)。 安装步骤如下: 1. 将下载的DLL文件复制到PHP的`ext`目录下。 2. 修改`php.ini`配置文件,在其中添加以下行: ``` ...
在【标签】中提到了“php源码”,这表明源码是用PHP编写的,你将有机会学习到PHP的面向对象编程(OOP)概念,如类、对象、继承、封装和多态性。此外,还可能涉及到PHP框架的基础,虽然这是一个“简易”商城,但可能...
在PHP开发中,多图片上传并显示缩略图是一个常见的需求,主要应用于各种网站的后台管理系统,例如博客、电商网站等。本项目提供了一个可运行的解决方案,包括前端用户界面和后端处理逻辑。下面将详细讲解这个实现...