📄 00000005.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: midi (迷笛), 信区: Linux <BR>标 题: Re: PHP3特有的语言特点 <BR>发信站: BBS 水木清华站 (Mon Nov 29 04:12:06 1999) <BR> <BR>我曾经在bbs.mit.edu里写文章说明过PHP的问题。有兴趣的朋友可以去看看。 <BR> <BR> <BR>这里我要指出的是,这位朋友概念没有弄清楚:什么叫CGI? <BR> <BR>CGI是Web服务器调用其它进程的接口。其核心是进程调用。以Linux上 <BR>的Apache来说,Apache调用的CGI,都是另外fork一个CGI进程。该进程 <BR>不是Apache Web Sever的一部分,而是一个独立运行的Application。 <BR>因此CGI程序都是独立的可以自己运行的运用程序,只是它们符合一个接口 <BR>标准,即CGI标准。 <BR> <BR>PHP是一种HTML嵌入式的脚本语言。其构成的HTML只是一种文档,而不是可以 <BR>独立运行的运用程序。作为Apache的一个模块,PHP的解释器在用户 <BR>请求一个PHP的页面时,实时解释它,并以纯HTML方式输出。PHP解释 <BR>器是Web服务器的模块,而不是独立进程。因此,说PHP是“CGI脚本语言”, <BR>概念完全错了。 <BR> <BR>另,PHP是一种没有前途的嵌入式脚本语言。原因是多方面的。 <BR>一,PHP缺乏规模支持。与之类似的嵌入语言,一个是ASP,一个是JSP <BR>前者可以通过Microsoft Windowsd的COM/DCOM获得ActiveX支持,后者 <BR>可以通过SUN Java的Java Class和EJB获得支持 <BR>二,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。 <BR>数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开, <BR>组成二维阵列。ASP可以通过DCOM和微软的Transcation Server来获得 <BR>这种结构支持,JSP可以通过EJB/CORBA以及众多厂商的Application Server来获得 <BR>这种结构支持,但PHP没有这样的条件 <BR>三,PHP及其没有道理地实现了一个混乱的不能统一的数据库接口支持,比如 <BR>对Oracle, MySQL, Sybase的接口,彼此都不一样。这一点让人感觉不可思议, <BR>而且也使它在电子商务中运用受阻----连PERL都通过DBI而获得一个抽象的 <BR>数据库接口! <BR> <BR>美国现在电子商务非常流行。这是指电子商务的支撑环境。微软现在精力 <BR>大概都在W2K和大官司上,因此这方面声音很小。IBM的eBuisness的广告相信 <BR>大家在各种媒体上都见到了。它的核心是采用JSP/Servlet的Web Sphere。西方 <BR>另外一个非常著名的电子商务软件提供商,Intershop。它原来的产品 <BR>Intershop1 2, 3, 4占据了主要的电子商务软件份额。它们都是通过CGI来提供支持 <BR>的。但今年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务 <BR>Application Server,而且声言不再开发传统软件。Allaire相信搞Web <BR>开发的人都听说过,因为它是ColdFushion的开发商。Cold Fushion是一个类似 <BR>PHP的东西,但Allaire已经不准备接着开发下去,因为它推出了另外一个 <BR>Application Server: JRun,一个JSP/Servlet的工具。在电子商务领域 <BR>另外一个非常著名的厂商就是Oracle。Oracle8i已经是一个EJB Container,它的 <BR>Application Server采用比较传统的机制,但前两天它推出了它自己的JSP解释器。 <BR> <BR>今年早些时候,Netscape公开声明不再开发Liveware技术了。Liveware就是 <BR>嵌入式的JavaScript,或者叫Server Side JavaScript.现在它和SUN结成商业 <BR>同盟,用的自然是JSP/Servlet. <BR> <BR>国内一些新闻媒体不知道出于什么原因,一直没能赶上美国的这个潮流, <BR>还在大肆宣传一些注定要过时的东西。当然,我不是说PHP要死,它或许还会 <BR>存在下去,但只会运用于一些小型的非商业性的站点。 <BR> <BR>如果诸位有心在这方面发展,或者想储备一些技术的话,奉劝花些精力 <BR>到ASP或者JSP上。在Linux上,JSP能有很多很好的支持和实现,比如IBM WebSphere, <BR>Oracle 8i+JSP,Apache Jserv+GNU JSP, Allaire JRun,以及Apache <BR>的一个新的计划:Jarkarta.另外,如果想在以后的电子商务支持上站住脚的 <BR>话,还请关注XML——我这两天刚发现国内也有个相关站点:www.xml.org.cn <BR> <BR>【 在 yyh (阿欢&正在努力上进中......) 的大作中提到: 】 <BR>∶<I> PHP3是一种非常强大的CGI脚本语言,就其语言特点基本上源于C,就其实现 </I><BR>∶<I> 方式而言更象PERL,而其对数据库的内在支持更使之成为ASP的强大对手。 </I><BR>∶<I> 这里先简要介绍一些PHP3中比较容易弄错的语言特点(与C语言相比较)。 </I><BR>∶<I> 1.自动屏蔽的全局变量在函数中的使用 </I><BR>∶<I> 不同于C语言,PHP3中的全局变量在函数中是默认不起作用的, </I><BR>∶<I> 比如 </I><BR>∶<I> <? </I><BR>∶<I> $a = 1; </I><BR>∶<I> function test() </I><BR>∶<I> { </I><BR>∶<I> print $a; // 变量 $a 未定义 </I><BR>∶<I> } </I><BR>∶<I> test(); </I><BR>∶<I> print $a; </I><BR>∶<I> ?> </I><BR>∶<I> 输出的结果不是预想中的“1 1”, 而只有一个“1”。因为 </I><BR>∶<I> 全局变量$a在函数里不存在,test函数里的$a无定义,因此不 </I><BR>∶<I> 显示,如果要使用全局变量必须用global声明,如 </I><BR>∶<I> <? </I><BR>∶<I> $a = 1; </I><BR>∶<I> function test() </I><BR>∶<I> { </I><BR>∶<I> global $a; </I><BR>∶<I> print $a; </I><BR>∶<I> } </I><BR>∶<I> test(); </I><BR>∶<I> print $a; </I><BR>∶<I> ?> </I><BR>∶<I> 或通过全局变量数组($GLOBALS[])来直接使用,如 </I><BR>∶<I> <? </I><BR>∶<I> $a = 1; </I><BR>∶<I> function test() </I><BR>∶<I> { </I><BR>∶<I> print $GLOBALS["a"]; </I><BR>∶<I> } </I><BR>∶<I> test(); </I><BR>∶<I> print $a; </I><BR>∶<I> ?> </I><BR>∶<I> 2.奇妙的变量访问机制 </I><BR>∶<I> PHP3里的变量名允许嵌套定义,如先定义一个$a="hello",然后可以用$$a="world" </I><BR>∶<I> 来访问$hello,最后变成$a="hello", $hello="world"。这里的$操作符有点象C语言 </I><BR>∶<I> 里的*,但$是以名字(字符串)链接,而*是以地址链接的。如 </I><BR>∶<I> <? </I><BR>∶<I> $a = "hello"; // 注意不能有空格 </I><BR>∶<I> $$a = "world"; </I><BR>∶<I> $$$a = "!"; </I><BR>∶<I> print $a; // 显示 hello </I><BR>∶<I> print $hello; // 显示 world </I><BR>∶<I> print $world; // 显示 ! </I><BR>∶<I> ?> </I><BR>∶<I> 另外PHP3还提供了用字符串做数组下标建立和访问数组的方法,如前面用到的全局 </I><BR>∶<I> 变量数组就是以这种机制访问的,如 </I><BR>∶<I> <? </I><BR>∶<I> $a["first"] = "second"; </I><BR>∶<I> $a["second"] = "third"; </I><BR>∶<I> $a["third"] = "first"; </I><BR>∶<I> print $a["first"]; // 显示 second </I><BR>∶<I> print $a[$a["second"]]; // 显示 first </I><BR>∶<I> print $a[$a[$a["third"]]];// 显示 third </I><BR>∶<I> ?> </I><BR>∶<I> 3.强大的分块方法 </I><BR>∶<I> 在C里面一个语句块可以用 { } 来标出,在 DELPHI 里则是 BEGIN END。而在 PHP3 里 </I><BR>∶<I> 更可以用一个":"将一段语句独立成块,这样做的好处不言自明。如 </I><BR>∶<I> <? </I><BR>∶<I> $date=getdate(time()); </I><BR>∶<I> if($date["hours"] < 12): </I><BR>∶<I> ?> </I><BR>∶<I> <H1>Good morning!</H1> </I><BR>∶<I> <? </I><BR>∶<I> elseif($date["hours"] < 18): </I><BR>∶<I> ?> </I><BR>∶<I> <H1>Good afternoon!</H1> </I><BR>∶<I> <? </I><BR>∶<I> else: </I><BR>∶<I> ?> </I><BR>∶<I> <H1>Good evening!</H1> </I><BR>∶<I> <? </I><BR>∶<I> endif; </I><BR>∶<I> ?> </I><BR>∶<I> while语句也支持类似的分块方法,如 </I><BR>∶<I> $a=5; </I><BR>∶<I> while($a-- > 0): </I><BR>∶<I> ?> </I><BR>∶<I> <H1>print a line</H1> </I><BR>∶<I> <? </I><BR>∶<I> endwhile; </I><BR>∶<I> ?> </I><BR> <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.189.34] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -