[英]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.