快捷搜索:   nginx

在PHP中使用全局变量(2)


一个简单的解决方法就是写一个类来提供获取这些变量的接口。这通常被称为“请求封装器”,下面是一个简单的例子:


<?php
Class Request
{
     var $_request
= array();
     function Request
() {
        
// Get request variables
        $this->_request = $_REQUEST
;
     }
     function get($name
) {
         return $this->_request[$name
];
     }
}
?>


上面的例子是一个简单的演示,当然在请求封装器(request wrapper)里面你还可以做很多其他的事情(比如:自动过滤数据,提供默认值等等)。
下面的代码演示了如何调用一个请求封装器:


<?php
$request = new Request
;
// Register object
$registry =& Registry::getInstance
();
$registry->set ('request', &$request
);
test
();
function test
() {
    $registry =& Registry::getInstance
();
    $request =& $registry->get ('request'
);
    
// Print the 'name' querystring, normally it'd be $_GET['name']
    echo htmlentities($request->get('name'
));
}
?>

正如你看到的,现在我们不再依靠任何全局变量了,而且我们完全让这些函数远离了全局变量。

结论

在本文中,我们演示了如何从根本上移除代码中的全局变量,而相应的用合适的函数和变量来替代。注册模式是我最喜欢的设计模式之一,因为它是非常的灵活,而且它能够防止你的代码变得一塌糊涂。
另外,我推荐使用函数参数而不是单件模式来传递注册器对象。虽然使用单件更加轻松,但是它可能会在以后出现一些问题,而且使用函数参数来传递也更加容易被人理解。
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论