PHP+MYSQL-单例模式的滑铁卢
单例模式是开发中常用的一种设计模式,它产生唯一对象来操作从而大大节约了系统资源,可谓是常胜将军。但是很不巧,他遇到了PHP+MYSQL组合的顽固抵抗,让他的狠辣手段毫无用武之地,甚至被置于傀儡的境地。
这是怎么回事呢?事情还要从单例模式的应用前提说起。
首先,单例模式的应用要在一个连续的应用中,可以跨页面可以跨请求,这是最好的条件,见效最大。但是PHP偏偏不走寻常路,专干一锤子买卖,每次页面访问完毕,就自动退出清理所有内存资源,下次再访问时又不厌其烦的重起炉灶,把资源重新初始化一次。PHP的个人主义太盛,又热衷于搞重复建设,完全没有大局观,搞得单例模式在最能出政绩的地方根本插不上手。
其次,在页面级别的单次脚本运行中,百无聊赖的单例模式只能小打小闹的混口饭吃,好歹还能跟自己心仪的PHP长相伴。谁成想突然来了个MYSQL,跟PHP打得火热,是基情四射啊,搞得单例模式连打杂的那点小权力都几乎被架空了,基本上成了傀儡了。MYSQL的数据库连接函数mysql_connect,拥有令单例模式为之胆寒的原生的单例能力,该函数的第四个参数就是是否建立新连接的标志开关,默认情况下,该参数就是false,也就是说只要每次调用该函数,只要是同一个数据库、用户名和密码的话,每次返回的数据库句柄都是第一次连接时返回的。如此强悍的内置的单例能力,如何不让单例模式冷汗连连。
最后,事情还没到最坏,虽然单例模式在PHP+MYSQL面前遭遇了滑铁卢,但好歹单例模式总归是有正式编制的全民固定工,绝大多数的程序员老总还是不敢轻易把他开除的,即使让它在PHP+MYSQL的团队里装装样子也是能忽悠人的。