O'Reilly-现代php译文(1)

php语言正在经历一场文艺复兴。php正在演进为一种流行的脚本语言得益于一些有益的特性,例如命名空间,traits,闭包和基于opcode缓存原理。这个流行的php生态系统也在进化。php开发者较少依赖整体框架,更多的是小的专用组件。这个composer依赖管理者正在对怎样建立php应用进行彻底变革;它让我们从框架的围墙花园解脱出来并让我们混合共同操作php组件以更好的适应常见的php应用。组件互用不可能没有社区规范标准和被php框架合作团队策划。

modern php这本书是新php的指引,它将向你展示怎样建立和部署令人惊叹的php应用通过社区标准、好的实践、和混合组件。

过去

在我们探索modern php之前,首先必须理解php的起源。php是一种服务器端的解释脚本语言。这意味着你写php代码,上传到服务器并被解释器执行。php是一种典型的被用于网站服务器例如apache或nginx来获取动态内容。然而,php也可用于创建强大的命令行应用(正如bash、ruby、python等)。很多php开发者没有意识到这些并忽略了这个令人兴奋的特性。尽管不是你。

你可以阅读php官方历史文档在http://php.net/manual/history.php.php.我将不重复因为它已经被Rasmus Lerdorf(php创建者)很好的说明。我将告诉你的是php有一个喧嚣的过去。php初始于被Rasmus Lerdorf写作CGI脚本集合去追踪它的线上简历访问。Lerdorf称它的CGI脚本集合为‘个人主页工具’。它的前身完全不同于我们现在所知道的php。Lerdorf
’s的早期php工具并不是脚本语言;它最初是为基本的变量和使用HTML嵌入语法自动窗体的变量提供解释的工具。

在1994-1998,php历经多次修改甚至受到了一些彻底的重写。Andi Gutmans and Zeev Suraski两个开发者加入Rasmus Lerdorf去改造php使它从CGI工具的一个集合变成一个带有更一致的语法和基本支持面向对象变成的成熟编程语言。他们命名为php3并在1998年底发布。这个php外号从早期名字分离,它是Hypertext
Preprocessor(超级文本预处理语言)的递归缩写。php3是最早并且最想我们所了解的php版本。它提供了优秀的对于各种数据库、协议和接口的可扩展性。php3的特性吸引了很多新的开发人员到这个项目中。截止到1998年底,php3已经被惊人的10%的世界网站服务器安装。

现在

如今,php语言在快速进化并被数以十计的来自世界各地的核心开发者维护。开发实践也被改变。在过去,它被共同实践去写php文件、用FTp上传到生产服务器,希望它运转。这是一种可怕的开发模式,但是它是必要的因为缺乏可行的本地开发环境。

现在,我们不用FTP而是被版本控制代替。版本控制软件如git帮助维持可被分支、分叉、合并的审查代码过程。本地开发环境因为有了虚拟机工具如Vagrant和供应工具如Ansible、Chef、Puppet.可以和生产服务器一样。我们用Composer依赖工具管理专业的php组件。我们的php代码被php框架合作团队用psr系列标准维护。我们彻底用工具如PHPUnit.来测试代码。我们用基于网站服务器的php的fasCGI进程管理工具来开发应用。我们通过opcode缓存来改善应用性能。

Modern PHP包含了很多你不熟悉或从旧版本升级而来的新实践。不要感到不堪重负。我将在后面带你走过每个概念。我也很兴奋在2014年有了官方规范草案。

大多数成熟的编程语言都有自己的规范。在雷曼体系中,规范是一个典型的定义php是什么的蓝图。这个蓝图被开发者用来创建、解释并执行代码。它不是为了那些用php创建应用和网站的。

2014年,Sara Golemon and Facebook宣布了第一个php规范草案在O’Reilly的OSCON会议上。你可以在php内部邮件列表里面看到这个官方声明,在github上面读到php规范。

由于多个php引擎的相互竞争,官方的php语言规范变得越来越重要。这个最初的php引擎是zend引擎,它用c语言编写了php解释器并引入了php4.这个zend引擎被Rasmus Lerdorf, Andi Gutmans, and Zeev Suraski创建。今天这个zend引擎是zend公司对php社区的主要贡献。然而,现在又有了第二个主要的php引擎-facebook公司的hiphop虚拟机。一个语言规范确保了这两个引擎都保持了一个基本的兼容性。

php引擎是一个分析、解释、执行的程序(例如zend引擎和facebook的hiphop虚拟机)。不要和php混淆,它是对php语言的基本参考。

未来

这个zend引擎通过新特性和性能的提升在迅速提升。我主要致力于zend引擎改善的竞争对手,特别是facebook的虚拟机和hack编程语言。

hack是一个新的基于php的高级编程语言。它引入了静态类型、新的数据结构和额外的对现有的动态类型的PHP代码保持向后兼容性的接口。hack是针对那些喜欢php的快速发展特性但需要从静态类型获取可预见性和稳定性的开发者。

我们将在后面讨论动态和静态特性。这两者的差异体现在当php类型被检查时。动态类型在运行时被检查,静态类型在编译时被检查。可以到第12章获取更多相关信息。

这是一个成为php编程人员兴奋的时代。php社区从来没有像现在这样充满活力、乐趣和创新。我希望这本书帮助你坚定的拥护-现代php实践。有很多新东西要学,更多的东西即将出现。考虑一下你的学习路线图。现在我们进入这本书。

注:初次翻译,请多多指教!

O'Reilly-现代php译文(1)

时间: 2024-08-13 15:28:02

O'Reilly-现代php译文(1)的相关文章

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据

这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序读取相关数据 原文:Reading Related Data with the Entity Framework in an ASP.NET MVC Application 译文版权所有,谢绝全文转载--但您可以在您的网站上添加到该教程的链接. 在之前的教程中您已经完成了学校数据模型.在本教程中你将

【最后一篇API译文】Android开发-API指南- Contacts Provider

Contacts Provider 今年加入了某字幕组,加之杂事颇多,许久未添新文了,惭愧之极. 在听闻 Google 即将重返中国后,近日忽又发现官方网站正在放出 API 中文版,比如本文.当然不是大家所译,但至少句子结构较通顺,窃以为比 MSDN 中文版好些.虽有些生硬(比如将 Provider 译为“提供者”,有趣得紧),但好在前无古人,也许 Google 自此便统一了自己的中文术语也未可知.能让更多的国人精确领悟 Android 的精髓,肯定是好事,希望 Google 继续坚持. 这事应

黑客与画家 part1 版权声明 part2 O'Reilly Media,Ina.介绍

part1 版权声明 page 11 版权声明 英文原版O'Reilly Media,Ina.出版社2004. 简体中文版由人民邮电出版社出版,2011.英文原版的翻译得到O'Reilly Media,Ina.的授权.此简体中文版的出版得到出版社和销售权的所有者-O'Reilly Media,Ina.的许可. 版权所有,未经书面许可,本书的任何部分不得以任何形式重制. part2 O'Reilly Media,Ina.介绍 page12,13 O'Reilly Media,Ina.介绍 为了满足

[译文]casperjs使用说明-测试

capserjs自带了一个测试框架,它提供了一个使你能够更容易的测试你的web应用的工具集. 注意: 1.1版本变更 这个测试框架,包括它的所有API,仅能使用在casperjs test子命令下 如果你在测试框架的范围以外使用casper.test的属性,会报error 从1.1-beta3开始,你能够在测试环境下改写casper的初始化配置,想知道更多,可以去dedicated FAQ entry.了解 单元测试 设想Cow为我们想要测试的对象: function Cow() { this.

菜鸟译文(二)——使用Java泛型构造模板方法模式

如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码.这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件: 读取每一行并解析: 把每一行的字符填充到Product或Customer对象: 将每一个对象添加到Set里: 返回Set. 正如你看到的,只有有注释的地方是不一样的.其他所有步骤都是相同的. ProductCsvReader.java public class ProductCsvReader {       Set<

[译文]Casperjs1.1.0参考文档-安装

安装 Casperjs能被安装在mac osx,windows 和大多数linux版本 依赖项 PhantomJS1.82及以上 Python2.6及以上 1.1版本的新特性 试验性的:在1.1-beta1版本,slimerjs 0.8及以上版本可以在 gecko(firefox)内核上运行你的测试.(仅需要在执行语句命令行中增加–engine=slimerjs这个参数) Mac osx下安装 略 Npm安装 略 从git安装 略 从一个档案安装 你可以从此处下载源代码: 最近的开发版: htt

【译文】用Spring Cloud和Docker搭建微服务平台

by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-microservices.html This blog series will introduce you to some of the foundational concepts of building a microservice-based platform using Spring Cloud

《道德经》全文和译文(经典版本)

<道德经>全文和译文(经典版本) 道德经>全文和译文 第一章 道可道(可以语言交流的道), 非常道(非真正意义上的道): 名可名(可以明确定义的名), 非常名(非真正意义上的名). 无名天地之始(天地在开始时并无名称), 有名万物之母(名只是为了万物的归属). 故常无欲以观其妙(因此常用无意识以发现其奥妙), 常有欲以观其徼(常用有意识以归属其范围). 两者同出异名(两种思维模式同出自一个地方但概念却不相同), 同谓玄之又玄(这就是玄之又玄的玄关窍). 众妙之门(它是打开一切奥妙的不二法

3.GitHub译文之创建仓库分支

原文档:https://help.github.com/articles/fork-a-repo/ 译文  by 星云 仓库分支是一个仓库的副本,复制一个仓库可以自由实验的变化不影响原项目. 最常见的是,仓库分支是用来向别人提出更改或使用别人的项目,作为你自己的想法的起点. 向别人提出变更项目 使用仓库分支的一个很好的例子是建议.修改.错误修复,而不是记录一个问题, 你发现,你可以: 创建仓库分支 修改 向项目负责人提出一份上传申请 如果项目所有者喜欢你修改的项目,他们可能会把你修改的项目固定在