Zend与PHP之间是什么关系

What is Zend's relationship with PHP?

每次看到PHP虚拟机中出现zend、zendvar之类的都很困惑,特意查了一下...

PHP最开始是由Rasmus Lerdorf在1994年发明,原名为Personal
Home Page(PHP),最初底层由perl语言开发,后改为C语言开发,此时的PHP/IF即为用C语言开发的一些CGI工具程序集... 1995年6月8日Rasmus Lerdorf将PHP/FI的代码公开。任职于Technion IIT公司的两个以色列程式设计师:Zeev
Suraski和Andi Gutmans,重写了PHP的解释器,成为PHP 3的基础,而PHP也在这个时候改称为Hypertext Preprocessor (PHP). 经过几个月测试,开发团队在1997年11月公布了PHP/FI 2,随后就开始PHP3的开放测试,最后在1998年6月正式发布PHP3。Zeev
Suraski和Andi Gutmans在PHP 3发布后开始改写PHP的核心,在1999年发布的PHP解释器命名为Zend Engine,Zend来源于这两个人名字中的Zeev 和 Andi, 而他们也在以色列的Ramat
Gan成立了以他们的名字命名的Zend Technologies公司来管理PHP的开发。PHP4+以上版本,虚拟机(解释器) 从此被称为 Zend
Engine
The Zend Engine is a virtual machine
that takes assembly-style, three-address instruction code and executes it.

While there's a lot of Zend in PHP, and Rasmus, Andi and Zeev are all involved at various levels, Zend Technologies does not control the development process. Indeed, nobody really controls the development process. php-internals is working
on that
.

The reason you see Zend all over the place when writing C extensions is due to the Zend Engine.


最初: PHP/FI (PHP/Form Interpreter)

      正如我们今天知道的那样,PHP起源于由Rasmus Lerdorf.用Perl开发的两个工具。PHP是 Personal Homepage Tool的简写,意为“个人主页工具”,而FI即Form Interpreter,意为表单解释器。 结合这两种工具形成的宏命令可用来发送SQL语句到数据库、处理表单和流控制。
      这两个工具用C语言重写后组合成了PHP/FI 2.0 (PHP/Form Interpreter 2.0)。这个时期的PHP看上去和现在的语法不太一 样,但本质上没有太大的不同。它支持变量、关联数组和函数。当然,那时还没有对象。

语法糖: PHP 3
    事实上,在PHP3的计划阶段,对象并不在安排之中。和今天的PHP一样,PHP3的主要架构 设计师也是Zeev Suraski和Andi Gutmans o PHP 3是由PHP/FI 2.0完全重写成的,但是对象并不是新 语法中必需的部分。

    据Zeev Suraski回忆,PHP对类的支持实际上是后来才加上的(准确地说是1997年8月27日)。 那时的类和对象实际上是定义和存取关联数组的另一种方式。

    当然,加入了方法和继承使得类比关联数组更加强大,但那时对于类的操作仍然存在很多局 限性,比如不能访问父类中被覆盖的方法(如果你不明白这里的意思也不用担心,我们将会在后 面解释)。另一个不足之处是对象在PHP脚本中被传递的方式并非最佳,我们马上就会讲到。

    在这个时期对象只是个边缘话题,在官方文档中也没有提及这方面的内容。PHP手册只用了 一句话和一段代码示例来介绍对象,而且该示例没有介绍对象的继承和属性等。



PHP的发明人Rasmus Lerdorf





Zend Technologies的创办人之一 - Zeev Suraski




Zend Technologies的创办人之一 - Andi Gutmans


PHP原本的简称为Personal Home Page,是拉斯姆斯·勒多夫Rasmus Lerdorf 为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的Perl程序。最初这些工具程序用来显示拉斯姆斯·勒多夫的个人履历,以及统计网页流量。他将这些程序和一些表单直译器整合起来,称为PHP/FI。PHP/FI可以和资料库连接,产生简单的动态网页程序。拉斯姆斯·勒多夫在1995年6月8日将PHP/FI公开公布,希望可以透过社群来加速程序开发与寻找错误。这个公布的版本命名为PHP 2,已经有今日PHP的一些雏型,像是类似Perl的变量命名方式、表单处理功能、以及嵌入到HTML中执行的能力。程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。

在1997年,任职于Technion IIT公司的两个以色列程序设计师:Zeev Suraski和Andi Gutmans,重写了PHP的解释器,成为PHP 3的基础,而PHP也在这个时候改称为PHP: Hypertext Preprocessor.。经过几个月测试,开发团队在1997年11月公布了PHP/FI 2,随后就开始PHP 3的开放测试,最后在1998年6月正式公布PHP 3。Zeev
Suraski和Andi Gutmans在PHP 3公布后开始改写PHP的核心,这个在1999年公布的剖析器称为Zend Engine,他们也在以色列的Ramat Gan成立了Zend Technologies来管理PHP的开发。

在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式公布,2004年7月13日则公布了PHP 5,PHP 5则使用了第二代的Zend Engine。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取资料库的延伸函式库)、以及许多效能上的增强。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。

2008年PHP 5成为了PHP唯一维护中的稳定版本。最新的发布版本为PHP 5.6.9。

PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode
的功能。

PHP 7的于2015年12月3日开发完成,主要的改进有PHPNG、JIT引擎、抽象语法树编译、异步编程。

Zend与PHP之间到底是什么关系的更多相关文章

  1. 屏幕尺寸,分辨率,像素,PPI之间到底什么关系?

    转载自:http://www.jianshu.com/p/c3387bcc4f6e 感谢博主的无私分享. 今天我给大家来讲讲这几个咱们经常打交道的词到底啥意思,以及他们之间到底有什么关系.这篇文章是我 ...

  2. 我的Android进阶之旅------>(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?

    作者:马忠信,作者授权早读课发表,转载请联系作者. 原文链接:http://www.jianshu.com/p/c3387bcc4f6e#  互联网早读课:http://zaodula.com/arc ...

  3. (全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?

    (全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? 产品经理马忠信关注 22015.08.30 13:59:20字数 2,660阅读 52,661 今天我给大家来讲讲这几个咱们经常打交道的词到 ...

  4. SOA和微服务到底是什么关系

    本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...

  5. SOA和微服务到底是什么关系?

    SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平台.业务的出现, ...

  6. JS原型的问题Object和Function到底是什么关系

    var F = function(){}; Objcert.prototype.a = function(){}; Function.prototype.b = function(){}; F 既能访 ...

  7. UML类图画法及其之间的几种关系(转)

    UML类图画法及其之间的几种关系 最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的 ...

  8. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用spring framework的IoC容器功能----->方法一:使用XML文件定义beans之间的依赖注入关系

    XML-based configuration metadata(使用XML文件定义beans之间的依赖注入关系) 第一部分 编程思路概述 step1,在XML文件中定义各个bean之间的依赖关系. ...

  9. UML类图画法及其之间的几种关系

    最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的几种关系:泛化(Generaliz ...

随机推荐

  1. SpringBoot主程序注解@SpringBootApplication简单分析

    一.@SpringBootApplication说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用: @SpringBootA ...

  2. 计蒜客 买书 dfs

    题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...

  3. 十分钟了解HTTPS

    一.为什么要用HTTPS——HTTP协议的缺陷 通信使用明文(不加密),内容可能会被窃听 不能验证通信方的身份,所以请求和响应都有可能是攻击者发送的 数据包在由A到B的过程中,可能经历很多次路由转发, ...

  4. BZOJ.4151.[AMPPZ2014]The Cave(结论)

    BZOJ 不是很懂他们为什么都要DFS三次.于是稳拿Rank1 qwq. (三道题两个Rank1一个Rank3效率是不是有点高qwq?) 记以\(1\)为根DFS时每个点的深度是\(dep_i\).对 ...

  5. 我的 FPGA 学习历程(13)—— 电子钟项目

    在秒表上一些其他模块就可以变成电子钟了,使用以下约定: 使用 KEY[0] 作为复位按键,复位后显示 00:00. 使用 KEY[1] 作为调整/暂停按键,暂停时电子钟调整的两个灯管保持 1Hz 的频 ...

  6. jquery中$.each()的用法

    each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...

  7. sortable的基本属性

    所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象   ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象    ...

  8. java.lang.ClassCastException: net.sf.json.JSONNull cannot be cast to net.sf.json.JSONObject的解决方法

    报错情况已经说明了,在百度查了好几个解决方法,这里总结一下: 首先:加一个判断是否为空,再做操作 // 得到json串 String jsonString = UtilPOSTGET.UPost(FO ...

  9. phpstorm 断点调试 傻瓜教程

    前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...

  10. 深入理解JVM(七)——性能监控工具

    前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮助开 ...