通过四种方式让PHP编码变得更轻松

  通过四种方式让PHP编码变得更轻松
  尽管已经目前PHP语言已经建立起属于自己的软件文化,但要找到它令人抓狂的弊端也绝对不是难事。我们曾经在之前的文章中列出过该语言最让开发人员难以接受的十二大糟糕特性。
  不过在过去几年当中,PHP已经发生了一系列变动——从语言本身到相关生态系统再到对开发者社区的支持——这些确实值得我们加以关注。尽管已经抛弃了PHP并投身于Python或者Ruby的用户们不太可能在短时间内被吸引回来,但已经有迹象表明确实有人在不遗余力地对PHP加以完善。下面我们就一同来了解PHP语言迎来的四大显著改进。
  1. 软件包与依赖性管理
  直到不久之前,对PHP软件包进行管理的惟一方式还只能是使用PEAR(即PHP扩展与应用程序库)。不过PEAR在使用难度上长期受到开发人员们的抨击,其中充斥着大量已经过时以及未受维护的软件组件。大多数更为流行的PHP框架都拥有自己的独特软件包管理系统——例如CakePHP的Bakery、CodeIgniter的Sparks等——不过它们很少或者几乎无法将PHP作为整体加以打理。
  这方面最大的变化源自Composer,它吸取到了Node.js的NPM系统与Ruby的Bundler当中的优秀要素。它会以项目作为基础对软件包进行追踪,这样一来开发人员就能更轻松地弄清楚特定项目需要使用哪些软件包并以自动化方式对其加以安装。它与名为Packagist的库协同运作,该库中已经包含大量常用PHP应用、框架以及组件。
  2. Hack/HHVM
  PHP获得的另外两大最为显著的变化源自PHP自身体系之外——更准确地说,来自Facebook:Hack语言与HHVM(即HipHop虚拟机)。前者在继承了PHP衣钵的同时添加了一系列PHP默认状态下无法实现的功能,例如静态对象类型。后者则能够将PHP代码编译为C++代码从而加快其执行速度,最终带来将近十倍于原本的性能水平。二者都属于推出时间相对较短的创新成果,因此它们对于PHP在长远角度的影响仍然有待观察。不过它们至少显示出主流Web服务巨头确实对PHP显示出浓厚的兴趣与认真的对待态度,并因此将其作为自身选定的平台方案。
  3. PHP-FIG
  虽然听起来像是种解闷的小零食(Fig意为无花果),但这实际上是一个PHP框架程序组,其中汇总了PHP开发者们所打造的用于构建开发标准(包括如何以一致性方式开发自己的项目)的技术成果。来自CakePHP、Drupal、Joomla以及SugarCRM等项目的技术人员们已经正式加入该团体,并为多项日常工作提供了标准化机制——其中包括编码风格指南、库登录接口以及如何处理类的自动载入等等。
  这个小组可以说是完全自愿加入而且并非正式机构,不过他们希望“随着时间的推移,其涵盖范围能够扩展到更为广泛的项目区划当中。”
  4. Phpng项目
  为PHP语言本体开发换代版本则是另一个为该语言带来全面提升的优秀思路。这个被称为Phpng的PHP开发分支当中包含诸多改进,旨在明确特定操作需要使用多少内存容量以及完成特定运行效果需要使用多少条机器指令。其中大部分工作都受到PHP供应商Zend技术公司的赞助,后者的PHP引擎被广泛用于该语言的商用安装方案当中。
  当然,其中大部分改进仅仅是为了提升其性能表现而并非改变PHP语言那备受讥讽的语法特性——遗憾的是,这些问题目前仍没有得到解决的迹象。也许PHP的下一次重大革新不会像Hack那样具备颠覆性效果,而更像是JavaScript扩展方案那种能够实现原生编译效果的转译语言。
  传送门:http://www.heimaoxuexi.com/forum-38-1.html

时间: 2024-08-10 00:35:06

通过四种方式让PHP编码变得更轻松的相关文章

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

ASP.NET MVC之下拉框绑定四种方式(十)

前言 上两节我们讲了文件上传的问题,关于这个上传的问题还未结束,我也在花时间做做分割大文件处理以及显示进度的问题,到时完成的话再发表,为了不耽误学习MVC其他内容的计划,我们今天开始好好讲讲关于MVC中下拉框中绑定枚举的几种方式. 话题引入 一般在下拉框中绑定数据的话,分为几种情况. (1)下拉框中的数据是写死的,我们直接给出死代码即可. (2)下拉框中的数据从数据库中读取出来,从而进行显示. (3)下拉框中直接用枚举显示. (4)下拉框中一个选择的值改变另外一个下拉框中的值. 关于下拉框中绑定

Skype for business/Lync之证书解析(四)证书申请的四种方式

有四种方式进行证书申请,这四种方式不仅适合skype/lync,也适合任何证书申请场景(除了第一种方式): 第一种方式:在SFB/LYNC安装界面中用证书向导自动生成与分配证书,操作最简单,但生成的证书导出时不能导出私钥. 第二种方式:通过MMC,参见本系列之http://huoxian.blog.51cto.com/9437529/1680132 第三种方式:通过web 通过web申请需要使用ssl加密连接,即采取https://ca/certsrv方式,默认没有https,请增加https连

C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文涉及程序为.NET Core 2.0控制台应用程序. 一.常量字符串拼接 private static void TestPerformance(Action action, int times) { Stopwatch sw = new Stopwatch(); sw.Start(); for(i

.net core 2.x - 缓存的四种方式

其实这些微软docs都有现成的,但是现在的人想对浮躁些,去看的不会太多,所以这里就再记录下 ,大家一起懒一起浮躁,呵呵. 0.基础知识 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始源返回更快. 在编写并测试应用时,应避免依赖缓存的数据.ASP.NET Core 支持多种不同的缓存. 最简单的缓存基于 IMemoryCache,它表示存储在 Web 服务器内存中的缓存. 在包含多个服务器的服务器场上运

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

JAVA中集合输出的四种方式

在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public static void main(String[] args) throws Exception { Set<Person> javaProgramers = new HashSet<Person>(); javaProgramers.add(new Person("aaron&qu

struts2访问国际化消息的四种方式

Struts2的国际化是建立在java国际化的基础之上的,因此具有强大的国际互能力.Struts2运行时自动检测当前的 Location,然后使用RsourceBundle加载对应的Locale资源文件.因为Struts2对java的国际化进行了封装,因此国际化起来更简单,用户一般提供不同国家的消息资源即可.在Struts2的国际化包含三个部分:前台的国际化,Action中的国际化,验证配置文件的国际化. 在Struts2中加载全局资源文件 国际化的前提是如何让Struts2能够加载到国际化消息

Android中多线程的使用四种方式最全总结

当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中.当一个组件在启动的