2015-08-25 47 views
1

首先使用的過濾器,我會告訴該函數:如何呼應filter_var

function validate($data, $filter){ 
    if(!filter_var($data, $filter)) 
    { 
    return 'Filter used:'.$filter; 
    } 
    else 
    { 
    return 'good'; 
    } 
} 

當我使用這個功能,它看起來就像這樣:

$email = '[email protected]'; 
echo validate($email, FILTER_VALIDATE_EMAIL); 

輸出是:

使用的過濾器:274

問題是我想輸出爲:

使用的過濾器:FILTER_VALIDATE_EMAIL。

回答

5

爲了得到你可能需要將過濾器作爲一個字符串傳遞和使用constant()實際常量名:

function validate($data, $filter){ 
    if(!filter_var($data, constant($filter))) 
    { 
    return 'Filter used:'.$filter; 
    } 
    else 
    { 
    return 'good'; 
    } 
} 

然後使用它像:

echo validate($email, 'FILTER_VALIDATE_EMAIL'); 

我開始思考多個標誌,我很無聊。這可能會帶來麻煩,但對於簡單的過濾器工作原理:

function validate(){  
    $args = func_get_args(); 
    $data = array_shift($args); 
    $con_args = array_map('constant', $args); 
    array_unshift($con_args, $data); 

    if(!call_user_func_array('filter_var', $con_args)) 
    { 
    return 'Filter used:'.implode(', ', $args); 
    } 
    else 
    { 
    return 'good'; 
    } 
} 

echo validate($url, 'FILTER_VALIDATE_URL', 'FILTER_FLAG_PATH_REQUIRED'); 
+0

優秀的答案。 +1 –

+0

感謝您的解決方案..作品像一個魅力 – Redoneben

+0

請接受,如果喜歡。 – AbraCadaver

1

FILTER_VALIDATE_EMAIL是設置爲274一個named constant。你的validate()函數永遠不會看到「FILTER_VALIDATE_EMAIL」,它只是看到274被傳入它並通過274filter_var(),它知道如何處理它。

開發人員常量的一個優點是:通過使用具有自動完成和代碼智能的IDE,可以確定變量的名稱,從而避免可能的拼寫錯誤。

查看@ AbraCadaver的答案,爲您的查詢提供優雅的解決方案。

+0

感謝您的解釋! – Redoneben