首页 > 编程 > PHP > 正文

php教程:php设计模式介绍之单条模式

2020-03-24 17:25:24
字体:
来源:转载
供稿:网友
上文:http://c2.com/cgi/wiki?GlobalVariablesAreBad)。当你需要一个特殊类的唯一实例时,使用这个名字叫单件的模式。基于单件模式的类能实例化和初始化这个类的一个实例,并且提供每时每刻绝对相同的连接。一般情况下使用名为getInstance()的静态方法实现。关键问题是,如何在每时每刻获得一个精确统一的实例。请看下面的例子:// PHP4
function TestGetInstance() {
$this- assertIsA(
$obj1 = DbConn::getInstance(),
DbConn ,
The returned object is an instance of DbConn );
$this- assertReference(
$obj1,
$obj2 = DbConn::getInstance(),
Two calls to getInstance() return the same object );
}注释:assertReference
assertReference() 方法确保两个被传递的参数引用自相同的PHP变量。
在PHP4中,这里断言两个被测试的参数的却是相同的对象。assertReference() 这个方法在移植到PHP5以后也许就不推荐使用了。这个test方法有两个断言:第一个判断第调用静态方法DbConn::getInstance()返回的值是DbConn对象的实例,第二个用来判断第二次调用getInstance()方法返回得值引用的是相同的对象实例,这意味着他们使用的是同一个对象。除了断言代码预期的执行结果,Test也预示了getInstance()的正确用法(PHP4):$local_conn_var= DbConn::getInstance()。引用(= )静态方法的返回值赋值给了这个局部变量。再写另外一段测试代码:直接用 new 来实例化一个单件类会引起某些类型的错误。test代码如下:function TestBadInstantiate() {
$obj = new DbConn;
$this- assertErrorPattern(
/(bad|nasty|evil|do not|don/ t|warn).* .
(instance|create|new|direct)/i );
}这段代码直接创建了一个 DbConn 的实例,将会引起PHP报错。为了让代码更稳定,我们用PCREhtml' target='_blank'>正则表达式来匹配报错信息。(显示报错信息的确切措词并不重要。)html教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表