簡體   English   中英

PHP 檢查是否設置了數組值

[英]PHP check if array values are set

我有以下 function:

public function insertMember($username, $password, $fname, $lname)
    {
        $param              = array();
        $param['username']  = $username;
        $param['password']  = $password;
        $param['fname']     = $fname;
        $param['lname']     = $lname;
        return (count(array_filter($param, 'strlen')) == 0) ? FALSE : $this->insertIntoDB($param);
    }

是否使用(count(array_filter($param, 'strlen')) == 0)是 go 關於檢查所有變量$username, $password, $fname, $lname是否已傳遞給 function 的正確/最佳方法?

謝謝,
帕夫

if(count(array_filter($array)) == 0)
//   all values are empty 

也許是對的,但不是最好的。
如果您需要檢查所有變量:

if (empty($username) || empty($password) || empty($fname) || empty($lname)) return false;

您可以省略'strlen'參數, array_filter的默認行為在這種情況下可以正常工作。 這樣代碼就短了一點。

但是,作為風格問題,您可能需要考慮顯式

if (empty($username) || empty($password) || ...)

因為它更容易向讀者傳達 function 對其 arguments 的要求。

為什么不早點放支票呢? 讓它像這樣:

public function insertMember($username, $password, $fname, $lname) {
    if (!$username || !$password || !$fname || !lname) {
        return false;
    } else {
        $param = array();
        $param['username'] = $username;
        $param['password'] = $password;
        $param['fname'] = $fname;
        $param['lname'] = $lname;
        return $this->insertIntoDB($param);
    }
}

這不會檢查數據的有效性,但是:

// Do something if 4 (all) arguments were passed in
if(func_num_args() == 4) {
}

我不喜歡使用array_filter ,因為通過它的名稱傳遞 function 感覺有點臟。 盡管如果您使用的是 stdlib 函數,它可能沒問題。

我會使用循環

foreach ($param as $v) {
    if (empty($v)) return false;
}

您無法真正檢查變量是否已傳遞給 function,您只能檢查它們的值。 如果該值為falsey ,您可以拒絕它。 這並不一定意味着變量沒有被傳遞,只是值是falsey

if (!$username || !$password || !$fname || !$lname)

要對其進行更多限制並接受例如空字符串和 0 作為有效值,請執行以下操作:

public function insertMember($username = null, $password = null, $fname = null, $lname = null) {
    if ($username === null || $password === null || $fname === null || $lname === null)

最好的方法可能是接受一個數組,您可以顯式地測試鍵是否存在,而不管它們的值如何:

public function insertMember($values) {
    if (array_diff_key(array_flip(array('username', 'password', 'fname', 'lname')), $values)) {
        // not all keys were set!
    }

無論如何,這:

$param             = array();
$param['username'] = $username;
$param['password'] = $password;
$param['fname']    = $fname;
$param['lname']    = $lname;

可以縮短為:

$params = compact('username', 'password', 'fname', 'lname');

暫無
暫無

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

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