【也许有经验的PHP程序员最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静

【也许有经验的PHP程序员最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,都会在页面执行完毕后被清空】

【在PHP中,如果需要在页面之间共享数据,需要手动将变量保存到预定义的全局变量$GLOBALS或$_SESSION中。PHP会将这些变量保存在某个文件中,以便下次执行页面时读取。但是,这种方式存在着极大的限制,除了效率的低下外,它还无法保存引用外部资源的变量,例如文件、Socket、数据库连接等,而正是这些资源最需要被缓存】

【即使是最简单的Singleton模式也无法在PHP中被应用。虽然可以使用PHP写出Singleton的代码,但是由于PHP中没有真正全局的static变量,所以每次页面被执行时,都会重新建立新的对象,这样也就完全失去了Singleton的意义。】

好不容易下决心选学php,居然遇到这样的缺漏
作为很多应用考验的php,很不应该啊:

既然是应用,就需要很多台常驻的信息需要高效地被存取(asp的session是构建web应用最常用的)

设计php的人,这点需求都想不到?比如:

现在游戏厅的3个房间有人在玩了,第4个人刷新页面,应该也能看到3个房间有人了

当然,可能与php最初是cgi模式有关,每次解释完一个页面,解释器就退出了,自然无法实现台常驻的信息。

但是,现在都有fastcgi、isapi,解释器可以常驻后台了,实现后台常驻的信息也就不难了。

作为应用这么多的语言、fastcgi出来这么久,还没实现台常驻的信息,就很不应该了

当然,可以同样文件、数据库、memcache系统来实现内台常驻的信息,但是间接了,环节多了,效率自然也打折扣了

当然,像asp解释器的session,因为是在解释器进程的内存里,多进程、多服务器共享session反而困难了,往往反而不得不借助于数据库了

很多优秀的语言总是差那么一点点,如mssql的T-SQL,居然只有top n没有skip m!最近的sql2012据说才开始支持类似skip m的功能。sql2005开始有row_number()能达到类似的效果,但是性能略低。sql2000的分页,就只能靠多次top的倒腾来实现!

09-14 19:53