其实,我不确定Quercus是否可以被认定为一门JVM语言;其次Quercus这个东东分开源版与商业版,开源版只能解释执行、而商业版能编译成Java字节码。

但我知道国内,阿里巴巴很早就在使用它,当然,他主要是把它作为一个前端页面的模版引擎,提供给用户自定义商铺样式。

这也是一种典型的使用场景。

  为什么PHP(包括流行的很多语言)不被接受为一种企业级的开发语言,个人以为正是我们用的最顺手的“动态数据类型”,企业级的应用需要数据有很强的可靠性、一致性,Java这样的强类型、编译性语言,能从开发测试阶段提供尽可能高的错误检出率,而很多人在用PHP开发的阶段就屏蔽/不关注系统错误提示,只要一个功能能走通就ok。

  而Java发展这么多年,已经有了足够甚至说太多的各种框架、库,可用于企业级开发,在JVM环境使用PHP,可以提高业务前端的开发效率,而底层使用Java的这些框架、库,确保数据的一致性、可靠性,并且可以使用Java很多技术和特性。

这个东东,我关注了很久,但无奈小团队,没有环境来完成相关实践的检验。

以下是翻译的其官方站点上的介绍,网上有很多翻译的,但可能没有遵循原文的逻辑:

Quercus是Caucho公司纯采用Java开发的一个PHP5引擎,基于开源授权协议GPL发布。Quercus自带很多个PHP模块和扩展如PDF、PDO、MySQL和JSON。Quercus使得可以将Java服务与PHP程序紧密集成,不费吹灰之力在PHP脚本中调用Java服务如JMS、Grails。

通过Quercus,PHP应用程序自动具备了使用了Java应用服务器的优秀特性,如连接池、集群化会话(clustered sessions)等。

Quercus实现了PHP 5语言标准,并且PHP扩展的开发不断完成,包括APC, iconv, GD, gettext, JSON, MySQL, Oracle, PDF, and Postgres。很多流行的PHP程序在Quercus中可以和在PHP解释器运行的只好不差。这是一份不断增加的PHP软件清单:DokuWiki, Drupal, Gallery2, Joomla, Mambo, Mantis, MediaWiki, Phorum, phpBB, phpMyAdmin, PHP-Nuke, Wordpress and XOOPS。

Quercus代表在Web应用与Web服务领域,Java与PHP相互整合的一种新的混合式思路。PHP应用开发过程中,可以选择使用Java的库及技术如JMS, EJB, SOA 框架, Hibernate, 与 Spring。这可能带来一些革新性的可能性,因为:

1) PHP代码被解释/编译成Java;

2)Quercus和它的库用Java编写;

这种架构使得PHP应用程序与Java库直接进行“对话”,因为都在同一个程序层(译注:这里是针对php的一个扩展php bridge)。为促进这种新的Java/PHP架构,Quercus提供了API及接口将Java库暴露给PHP使用。

官方提供了Quercus .war文件可以在Java应用服务器上运行,这样,它其实可以在Resin之外运行(译注:Caucho公司主要是提供Resin服务器的),该文件包含Quercus解释器与PHP库。

可以参考:

http://www.oschina.net/question/81666_38888

http://blog.caucho.com/2009/04/14/using-php-as-a-spring-mvc-view-via-quercus/

Quercus的更多相关文章

  1. paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境

    paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境 #---混合编程的类型 1.代码inline 方式 2.使用库/api  解析方式. #----配置resin 支 ...

  2. [转]基于 Quercus 的手游项目终于上线了

    原文:http://blog.andsky.com/quercus-php-ngame/ 经过半年的开发,我们第一款手游戏终于开发完毕,架构使用了 netty + Quercus 实现用 php 通过 ...

  3. 比较偏门的JVM语言Quercus - PHP on JVM

    其实,我不确定Quercus是否可以被认定为一门JVM语言:其次Quercus这个东东分开源版与商业版,开源版只能解释执行.而商业版能编译成Java字节码. 但我知道国内,阿里巴巴很早就在使用它,当然 ...

  4. Using PHP as a Spring MVC View via Quercus(转)

    原贴: http://blog.caucho.com/2009/04/14/using-php-as-a-spring-mvc-view-via-quercus/ This week, I’ve be ...

  5. Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)

    Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用) 1.1. Keyword1 1.2. 前言1 2. Java项目使用.Net的aspx页面view1 ...

  6. 总结-php

    strtr('li.a-o_lo.n_g-jun', '-_.', '+/=')  好高级啊 在tomcat里使用php用quercus PHP in java  http://quercus.cau ...

  7. JPHP最新进展 v0.6

    项目地址:https://github.com/jphp-compiler/jphp 旧文:http://www.cnblogs.com/x3d/p/3631386.html 旧文2:http://w ...

  8. Deformity JSP Webshell、Webshell Hidden Learning

    catalogue . JSP基础语法 . JSP Lexer By Lua . Open Source Code Analyzers in Java . WEBSHELL Samples . she ...

  9. Atitit.软件开发提升稳定性总结

    Atitit.软件开发提升稳定性总结 #----影响稳定性几个类别 3 1. 资源和内存泄漏溢出 3 2. 数据库/文件死锁 3 3. 类库冲突 3 4. 热更新热部署(业务可用性 3 5. 程序崩溃 ...

随机推荐

  1. JAVA基础--super关键字

    子类对象new的时候堆里的内存分配: 1. 父类成员变量 2. 子类成员变量 3. this对象指向自己 4. super对象指向父类 super调用父类的方法: class FatherClass ...

  2. Init.rc分析(刘举奎)

    http://www.360doc.com/content/14/0926/20/13253385_412582822.shtml

  3. CodeForces 610B Vika and Squares

    #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...

  4. Hibernate---基础配置

    hibernate.cfg.xml里可以设置一个值显示更详细的sql语句: <property name="format_sql">true</property& ...

  5. nginx keepalived 主从切换

    注:  LVS + Keepalived  不知道为什么出现一个很郁闷的问题....... ------------------------------------------------------ ...

  6. Xcode的管理工具

    Xcode插件管理工具Alcatraz Alcatraz 1.简介 Alcatraz是一个能帮你管理Xcode插件丶模版及颜色配置的工具.它可以直接集成在Xcode的图形界面中,让你感觉就像在使用Xc ...

  7. shell字符串操作之cut---实现字符串截取

    shell中(字符串截取) cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切 ...

  8. Servlet实现文件上传(深度)(二)

    1.首先我们定义struts.properties的文件上传中的规则如下 struts.action.extension=action  <!--以.action为我们提交的后缀名-->s ...

  9. Bestcoder #80

    首先吐槽一下,ca爷出的这套题到处都是坑,bestcoder变成besthack,Ranting已经掉得不能看了 A题: 链接:http://acm.hdu.edu.cn/showproblem.ph ...

  10. net stop 出现1060错误

    net stop时出现1060错误,答案: 原来,net stop后面不能想当然地加上服务,而要在‘服务’里看看,那个服务究竟叫什么名字. 比如,我的mysql安装时不叫mysql,而是mysql5 ...