->assertReference($reg->get (‘key’), $reg2->get(‘key’));
}
}
要自己 实现类静态变量,可以将一个对函数静态变量的引用绑定到类的实例变量上。
代码:
class RegistryMonoState {var
php设计模式介绍之注册模式 - 凌众科技
快速业务通道
php设计模式介绍之注册模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
|
content |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|
|
|
store;
function &_initRegistry() { static $store = array(); return $store;
}
function RegistryMonoState() {
$this->_store =& $this->_initRegistry();
}
function isValid($key) {
return array_key_exists($key, $this->_store);
}
function &get ($key) {
if (array_key_exists($key, $this->_store))
return $this- >_store[$key];
}
function set($key, &$obj) {
$this->_store [$key] =& $obj;
}
}
initRegistry()方法包含一个初始化为数组的静 态变量。这个静态变量通过引用返回。在构造函数中
php设计模式介绍之注册模式 - 凌众科技
快速业务通道
php设计模式介绍之注册模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
|
content |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|
|
|
store实例变量被赋于通过initRegistry()函数返 回的引用——即静态数组。好!一个PHP4的类静态变量产生了。
使用类静态变量的实 现:
PHP5中,没有必要自己实现类静态变量,因为PHP5直接支持类静态变量。因此,PHP5简化了 实现。而且,PHP5中引用、对象不再有PHP4中的意义,但是assertReference() 处理了这种差别,如果 两个变量指向同一个对象句柄也可以通过测试。
以下是为PHP5改写的类似的ReGIStry测试用例。
代码:
// PHP5
class RegistryMonoStatePHP5TestCase extends UnitTestCase {
function testRegistryMonoState() {
$this->assertCopy(
$reg = new RegistryMonoState
,$reg2 = new RegistryMonoState);
$this- >assertFalse($reg->isValid(‘key’));
$this->assertNull($reg- >get(‘key’));
$test_value = new TestObj;
$reg->set (‘key’, $test_value);
$this->assertReference($test_value, $reg2- >get(‘key’));
}
}
以下是PHP5版本的使用静态类变量的 Registry类。
代码:
class RegistryMonoState {
protected static $store = array();
function isValid($key) {
return array_key_exists($key, RegistryMonoState::$store);
}
function get($key) {
if (array_key_exists ($key, RegistryMonoState::$store))
return RegistryMonoState::$store[$key];
}
function set($key, $obj) {
RegistryMonoState::$store[$key] = $obj;
}
}
PHP5中用这种方式编码Registry类的一个有趣的效果是你可以用相同的代码使用实例 或者静态方法。以下是证明仅仅使用静态方法的测试用例。
代码:
class RegistryMonoStatePHP5TestCase extends UnitTestCase {
function testRegistryMonoState() { /*...*/ }
function testRegistryMonoStateStaticCalls() {
$this->assertFalse(RegistryMonoState::isValid(‘key’));
$this- >assertNull(RegistryMonoState::get(‘key’));
$test_value = new TestObj; RegistryMonoState::set(‘key’, $test_value);
$this- >assertIdentical($test_value, RegistryMonoState::get(‘key’));
}
现在你已经看到在PHP5中的静态调用接口,下面让我们在PHP4中实现相同的接口。在前 面的PHP4“静态类变量”部分,实现需要使用“函数静态变量返回引用”来跟踪 。PHP4版本的静态调用接口测试与PHP5版本的测试类似。
代码:
// PHP4
class RegistryStaticPHP4TestCase extends UnitTestCase {
function testRegistryStatic() {
$this->assertFalse(Reg
|