簡體   English   中英

服務器端用戶輸入驗證 - 類設計*

[英]server side user input validation - class design*

我測試客戶端和服務器端的用戶輸入。 在服務器端,有一個簡短的類,由靜態函數組成,用於驗證用戶輸入。 課程注冊和登錄會調用這些功能。 我擔心的是我不應該使用靜態函數。 我應該使用靜態函數來驗證用戶輸入嗎? 謝謝。

/*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);
    }
}

該類的目的最終與關於靜態成員函數和非靜態成員函數的決策無關。 如果類的對象具有狀態 ,或者該類僅僅是命名空間的替身,那么重要的是什么。

在后一種情況下,類只是在一個公共名稱空間中收集一堆松散相關的函數,但是你永遠不會實例化該類。 在前一種情況下,您應該將類​​的設計目的所共有的所有數據作為私有成員放入類中,並在您的(非靜態)函數中使用這些成員。

在您的示例中,我可以看到您將$a a設為私有成員:

class CheckInput
{
    private $data;

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

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

    // ...
}

這樣,您為每組輸入數據實例化一個CheckInput對象。

我對此的看法是,如果這只是一個Utility類,那么靜態函數應該完成這項工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM