如何创建PHP单例类来处理请求变量?

时间:2010-08-13 12:49:19

标签: php singleton

正在考虑创建一个名为'Request'的Single类来处理和清理POST和GET变量,但是对单例模式不熟悉我不知道如何实现它。理想情况下,我希望发布2个函数($ name,$ clean)和get($ name,$ clean) - $ clean是一个布尔值来确定是否修剪/转义值

2 个答案:

答案 0 :(得分:1)

我认为即使是练习,使用单身人士也会很棒。仅仅因为有人不认为这是正确的方法并没有让它错。通过使用和实现想法,无论多大或多小,您将学习并扩展您对所述实现的了解。您很快就会知道它是否适合您的特定情况。那你就不必接受别人的意见了。

话虽如此,我说要去吧。我明白你为什么要这样做。这个想法是,“我希望所有东西都可以进行清洗以进行注射(等等),这样我就可以确保它会在每次输入时发生。”

请允许我说清楚一点。为什么不使用$ _REQUEST实现一个方法来处理$ _GET和$ _POST?虽然这可能是一个简单的方法,但它会让你开始。

$cleanser = Cleanser::singleton();
$new_request_array = $cleanser->clean($_REQUEST);

class Cleanser
{
    private static $instance;
    private function __construct() { }

    public static function singleton() {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function clean($request) {
        foreach($request as $key => $value) {
            // perform any cleansing here
            $cleansed[$key] = trim($value);
        }

        return $cleansed;
    }

    public function __clone() {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }
}

玩得开心,记住,在学习方面没有“错误”或“错误”。我认为这是StackOverflow试图制作的方法。我们在这里学习如何做某事,而不是根据我们的实施来判断。所以玩得开心!

答案 1 :(得分:0)

我不确定为什么你认为这是一个单身人士的好候选人 - 我曾经认为一个简单的静态类会更有意义。 (顺便提一下,我认为你使用内置的filter functions?)

虽然是一种粗略的简化,但是单身人士善于限制/控制对有限资源的访问,而在这种情况下并非如此。