服务器端用户输入验证 - 类设计*

时间:2011-09-18 21:47:52

标签: php

我测试客户端和服务器端的用户输入。在服务器端,有一个简短的类,由静态函数组成,用于验证用户输入。课程注册和登录会调用这些功能。我担心的是我不应该使用静态函数。我应该使用静态函数来验证用户输入吗?感谢。

/*check*/

class check 
{
    static function empty_user($a)
    {
        return (int)!in_array('',$a); 
    }   

    static function name($a)
    {
        return preg_match('/^[a-zA-Z-\.\s]{1,40}$/',$a);
    }

    static function email($a)
    {
        return preg_match('/^[a-zA-Z0-9._s-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{1,4}$/',$a);
    }

    static function pass($a)
    {
        return preg_match('/^[a-zA-Z0-9!@#$%^&*]{6,20}$/',$a);
    }
}

2 个答案:

答案 0 :(得分:4)

该类的目的最终与静态成员函数与非静态成员函数的决策无关。如果类的对象具有状态,或者该类仅仅是命名空间的替身,那么重要。

在后一种情况下,该类只是在一个公共命名空间中收集一堆松散相关的函数,但是你永远不会实例化该类。在前一种情况下,您应该将类​​的设计目的所共有的所有数据作为私有成员放入类中,并在您的(非静态)函数中使用这些成员。

在您的示例中,我可以看到您将$a设为私人成员:

class CheckInput
{
    private $data;

    public function init($a) { $this->data = $a; } // or write a constructor

    public function email() { ... $this->data ... }

    // ...
}

这样,您为每组输入数据实例化一个CheckInput对象。

答案 1 :(得分:0)

我对此的看法是,如果这只是一个Utility类,那么静态函数应该可以完成这项工作。