﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gavin&#039;s Blog &#187; 工作模型</title>
	<atom:link href="http://laigw.name/tag/%e5%b7%a5%e4%bd%9c%e6%a8%a1%e5%9e%8b/feed" rel="self" type="application/rss+xml" />
	<link>http://laigw.name</link>
	<description>Keep it simple, stupid. Simplicity is beauty.</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:14:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP沉思录之一：工作模型与数据库访问接口</title>
		<link>http://laigw.name/post/177.html</link>
		<comments>http://laigw.name/post/177.html#comments</comments>
		<pubDate>Tue, 18 Nov 2008 07:58:31 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PAO]]></category>
		<category><![CDATA[工作原理]]></category>
		<category><![CDATA[工作模型]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[沉思录]]></category>
		<category><![CDATA[访问接口]]></category>

		<guid isPermaLink="false">http://www.laigw.name/?p=177</guid>
		<description><![CDATA[本文发表于《程序员》5月号，是一个系列的第一篇，目前想到的其他一些主题是：
　　
　　SQL注入问题
　　事件模型
　　AOP模型
　　UI Framework的实现
　　Template机制
　　
PHP沉思录&#8211;工作模型
　　
     PHP的工作模型非常特殊。从某种程度上说，PHP和ASP、ASP.NET、JSP/Servlet等流行的Web技术，有着本质上的区别。
     以Java为例，Java在Web应用领域，有两种技术：Java Servlet和JSP（Java Server Page）。Java Servlet是一种特殊类型的Java程序，它通过实现相关接口，处理Web服务器发送过来的请求，完成相应的工作。JSP在形式上是一种类似于PHP的脚本，但是事实上，它最后也被编译成Servlet。也就是说，在Java解决方案中，JSP和Servlet是作为独立的Java应用程序执行的，它们在初始化之后就驻留内存，通过特定的接口和Web服务器通信，完成相应工作。除非被显式地重启，否则它们不会终止。因此，可以在JSP和Servlet中使用各种缓存技术，例如数据库连接池。

     ASP.NET的机制与此类似。至于ASP，虽然也是一种解释型语言，但是仍然提供了Application对象来存放应用程序级的全局变量，它依托于ASP解释器在IIS中驻留的进程，在整个应用程序的生命期有效。
     PHP却完全不是这样。作为一种纯解释型语言，PHP脚本在每次被解释时进行初始化，在解释完毕后终止运行。这种运行是互相独立的，每一次请求都会创建一个单独的进程或线程，来解释相应的页面文件。页面创建的变量和其他对象，都只在当前的页面内部可见，无法跨越页面访问。在终止运行后，页面中申请的、没有被代码显式释放的外部资源，包括内存、数据库连接、文件句柄、Socket连接等，都会被强行释放。也就是说，PHP无法在语言级别直接访问跨越页面的变量，也无法创建驻留内存的对象。
     见下例：
　　

&#160;查看代码 PHP1
2
3
4
5
6
7
8
9
10
11
12
13
14
　　&#60;?php 
　　class StaticVarTester &#123; 
　　 public static $StaticVar = 0; 
　　&#125; 
　　 
　　function TestStaticVar&#40;&#41; &#123; 
　　 StaticVarTester :: $StaticVar += 1; 
　　 echo &#34;StaticVarTester [...]]]></description>
		<wfw:commentRss>http://laigw.name/post/177.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

