电脑安全

您当前的位置:主页 > 电脑安全 >

PHP沉思录-网络编程

来源:[db:来源]标题:   都会    编辑:电脑技术全能网 时间:2019-09-21 12:23

原标题:PHP沉思录-网络编程
   本文是一个系列的第一篇,现在想到的其余一些主题是:     SQL注入成绩   变乱模子   AOP模子   UI Framework的完成   Template机制       PHP寻思录   任务模子   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无奈在言语级别间接拜访逾越页面的变量,也无奈创立驻留内存的工具。见下例:     <?php   class StaticVarTester {   public static $StaticVar = 0;   }     function TestStaticVar() {   StaticVarTester :: $StaticVar += 1;   echo "StaticVarTester :: StaticVar = " . StaticVarTester :: $StaticVar;   }     TestStaticVar();   echo "<br/>";   TestStaticVar();   ?>    在这个例子中,界说了一个名为StaticVarTester的类,它唯一一个大众的动态成员$StaticVar,并被初始化为0。而后,在 TestStaticVar()函数中,对StaticVarTester :: $StaticVar停止累加操纵,并将它打印输入。  熟习Java或C++的开辟者对这个例子应当并不生疏。$StaticVar作为StaticVarTester类的一个动态成员,只在类被装载时停止初始化,不管StaticVarTester类被实例化几多次,$StaticVar都只存在一个实例,并且不会被屡次初始化。因而,当第一次挪用 TestStaticVar()函数时,$StaticVar停止了累加操纵,值为1,并被保留。第二次挪用TestStaticVar()函数,$ StaticVar的值为2。   打印进去的成果和咱们预感的一样:     StaticVarTester :: StaticVar = 1   StaticVarTester :: StaticVar = 2     然而,当扫瞄器革新页面,再次履行这段代码时,差别的情形呈现了。在Java或C++外面,$StaticVar的值会被保留并始终累加上来,咱们将会看到以下的成果:     StaticVarTester :: StaticVar = 3   StaticVarTester :: StaticVar = 4   …     然而在PHP中,因为上文叙及的机制,以后页面每次都说明时,都市履行一次顺序初始化和停止的进程。也就是说,每次拜访时,StaticVarTester都市被从新装载,而以下这行语句     public static $StaticVar = 0;    也会被反复履行。当页面履行实现后,全部的内存空间都市被接纳,$StaticVar这个变量(连同全部StaticVarTester类)也就不复存在。