荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Lg (创造人生的传奇), 信区: Linux
标  题: [转载] Re: PHP3特有的语言特点(转寄)
发信站: BBS 荔园晨风站 (Mon Nov 29 21:07:01 1999), 站内信件

【 以下文字转载自 Lg 的信箱 】
【 原文由 liugang.bbs@bbs.net.tsinghua.edu.cn 所发表 】
发信人: midi (迷笛), 信区: Linux
标  题: Re: PHP3特有的语言特点
发信站: BBS 水木清华站 (Mon Nov 29 04:12:06 1999)

我曾经在bbs.mit.edu里写文章说明过PHP的问题。有兴趣的朋友可以去看看。


这里我要指出的是,这位朋友概念没有弄清楚:什么叫CGI?

CGI是Web服务器调用其它进程的接口。其核心是进程调用。以Linux上
的Apache来说,Apache调用的CGI,都是另外fork一个CGI进程。该进程
不是Apache Web Sever的一部分,而是一个独立运行的Application。
因此CGI程序都是独立的可以自己运行的运用程序,只是它们符合一个接口
标准,即CGI标准。

PHP是一种HTML嵌入式的脚本语言。其构成的HTML只是一种文档,而不是可以
独立运行的运用程序。作为Apache的一个模块,PHP的解释器在用户
请求一个PHP的页面时,实时解释它,并以纯HTML方式输出。PHP解释
器是Web服务器的模块,而不是独立进程。因此,说PHP是“CGI脚本语言”,
概念完全错了。

另,PHP是一种没有前途的嵌入式脚本语言。原因是多方面的。
一,PHP缺乏规模支持。与之类似的嵌入语言,一个是ASP,一个是JSP
前者可以通过Microsoft Windowsd的COM/DCOM获得ActiveX支持,后者
可以通过SUN Java的Java Class和EJB获得支持
二,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。
数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,
组成二维阵列。ASP可以通过DCOM和微软的Transcation Server来获得
这种结构支持,JSP可以通过EJB/CORBA以及众多厂商的Application Server来获得
这种结构支持,但PHP没有这样的条件
三,PHP及其没有道理地实现了一个混乱的不能统一的数据库接口支持,比如
对Oracle, MySQL, Sybase的接口,彼此都不一样。这一点让人感觉不可思议,
而且也使它在电子商务中运用受阻----连PERL都通过DBI而获得一个抽象的
数据库接口!

美国现在电子商务非常流行。这是指电子商务的支撑环境。微软现在精力
大概都在W2K和大官司上,因此这方面声音很小。IBM的eBuisness的广告相信
大家在各种媒体上都见到了。它的核心是采用JSP/Servlet的Web Sphere。西方
另外一个非常著名的电子商务软件提供商,Intershop。它原来的产品
Intershop1 2, 3, 4占据了主要的电子商务软件份额。它们都是通过CGI来提供支持
的。但今年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务
Application Server,而且声言不再开发传统软件。Allaire相信搞Web
开发的人都听说过,因为它是ColdFushion的开发商。Cold Fushion是一个类似
PHP的东西,但Allaire已经不准备接着开发下去,因为它推出了另外一个
Application Server: JRun,一个JSP/Servlet的工具。在电子商务领域
另外一个非常著名的厂商就是Oracle。Oracle8i已经是一个EJB Container,它的
Application Server采用比较传统的机制,但前两天它推出了它自己的JSP解释器。

今年早些时候,Netscape公开声明不再开发Liveware技术了。Liveware就是
嵌入式的JavaScript,或者叫Server Side JavaScript.现在它和SUN结成商业
同盟,用的自然是JSP/Servlet.

国内一些新闻媒体不知道出于什么原因,一直没能赶上美国的这个潮流,
还在大肆宣传一些注定要过时的东西。当然,我不是说PHP要死,它或许还会
存在下去,但只会运用于一些小型的非商业性的站点。

如果诸位有心在这方面发展,或者想储备一些技术的话,奉劝花些精力
到ASP或者JSP上。在Linux上,JSP能有很多很好的支持和实现,比如IBM WebSphere,
Oracle 8i+JSP,Apache Jserv+GNU JSP, Allaire JRun,以及Apache
的一个新的计划:Jarkarta.另外,如果想在以后的电子商务支持上站住脚的
话,还请关注XML——我这两天刚发现国内也有个相关站点:www.xml.org.cn

【 在 yyh (阿欢&正在努力上进中......) 的大作中提到: 】
: PHP3是一种非常强大的CGI脚本语言,就其语言特点基本上源于C,就其实现
: 方式而言更象PERL,而其对数据库的内在支持更使之成为ASP的强大对手。
: 这里先简要介绍一些PHP3中比较容易弄错的语言特点(与C语言相比较)。
: 1.自动屏蔽的全局变量在函数中的使用
: 不同于C语言,PHP3中的全局变量在函数中是默认不起作用的,
: 比如
: <?
: $a = 1;
: function test()
: {
: print $a; // 变量 $a 未定义
: }
: test();
: print $a;
: ?>
: 输出的结果不是预想中的“1 1”, 而只有一个“1”。因为
: 全局变量$a在函数里不存在,test函数里的$a无定义,因此不
: 显示,如果要使用全局变量必须用global声明,如
: <?
: $a = 1;
: function test()
: {
: global $a;
: print $a;
: }
: test();
: print $a;
: ?>
: 或通过全局变量数组($GLOBALS[])来直接使用,如
: <?
: $a = 1;
: function test()
: {
: print $GLOBALS["a"];
: }
: test();
: print $a;
: ?>
: 2.奇妙的变量访问机制
: PHP3里的变量名允许嵌套定义,如先定义一个$a="hello",然后可以用$$a="world"
: 来访问$hello,最后变成$a="hello", $hello="world"。这里的$操作符有点象C语言
: 里的*,但$是以名字(字符串)链接,而*是以地址链接的。如
: <?
: $a = "hello"; // 注意不能有空格
: $$a = "world";
: $$$a = "!";
: print $a; // 显示 hello
: print $hello; // 显示 world
: print $world; // 显示 !
: ?>
: 另外PHP3还提供了用字符串做数组下标建立和访问数组的方法,如前面用到的全局
: 变量数组就是以这种机制访问的,如
: <?
: $a["first"] = "second";
: $a["second"] = "third";
: $a["third"] = "first";
: print $a["first"]; // 显示 second
: print $a[$a["second"]]; // 显示 first
: print $a[$a[$a["third"]]];// 显示 third
: ?>
: 3.强大的分块方法
: 在C里面一个语句块可以用 { } 来标出,在 DELPHI 里则是 BEGIN END。而在 PHP3 里
: 更可以用一个":"将一段语句独立成块,这样做的好处不言自明。如
: <?
: $date=getdate(time());
: if($date["hours"] < 12):
: ?>
: <H1>Good morning!</H1>
: <?
: elseif($date["hours"] < 18):
: ?>
: <H1>Good afternoon!</H1>
: <?
: else:
: ?>
: <H1>Good evening!</H1>
: <?
: endif;
: ?>
: while语句也支持类似的分块方法,如
: $a=5;
: while($a-- > 0):
: ?>
: <H1>print a line</H1>
: <?
: endwhile;
: ?>


--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.189.34]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 210.39.3.97]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店