我有以下功能:
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)
正确/最佳方式检查所有变量$username, $password, $fname, $lname
是否已传递给函数?
谢谢,
PAV
答案 0 :(得分:1)
也许是对的,但不是最好的 如果您需要检查所有变量:
if (empty($username) || empty($password) || empty($fname) || empty($lname)) return false;
答案 1 :(得分:1)
您可以省略'strlen'
参数,array_filter
的默认行为在这种情况下可以正常工作。这样代码就会缩短一点。
但是,作为一种风格问题,您可能需要考虑明确的
if (empty($username) || empty($password) || ...)
因为它更容易向读者传达关于其论点的功能要求。
答案 2 :(得分:1)
为什么不早点检查?做到这样:
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);
}
}
答案 3 :(得分:1)
这不会检查数据的有效性,但是:
// Do something if 4 (all) arguments were passed in
if(func_num_args() == 4) {
}
答案 4 :(得分:1)
我不喜欢使用array_filter
,因为通过名称传递函数会感觉很脏。虽然如果你使用stdlib函数,它可能没问题。
我会使用循环
foreach ($param as $v) {
if (empty($v)) return false;
}
答案 5 :(得分:1)
您无法真正检查变量是否已传递给函数,您只能检查它们的值。如果值为 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');