我想知道是否有我可以做的事情,除了设置每个函数为一个变量,然后在if
中设置它以执行所有函数,即使第一个返回false(或第二个),结束if。
public function register($username, $email, $password) {
if($this->validate_username($username) && $this->validate_email($email) && $this->validate_password($password)) {
$this->User->register($username, $email, $this->password($password));
return TRUE;
}
return FALSE;
}
基本上发生的事情是第一个函数($this->validate_username($username)
)返回false,因此其他函数没有被执行。问题是,如果其他参数也为false,它们会为用户设置错误。我真的不想把每个函数设置为一个变量(如果我必须的话),所以我想知道是否有另一种方式来表达if
,以便其中一个函数是否返回true/false,所有这些函数都将被执行。
这没什么大不了的,如果有办法就好了。
您可以使用位与运算符(&
),它不会短路,而不是逻辑与运算符(&&
),它会短路:
public function register($username, $email, $password) {
if($this->validate_username($username) & $this->validate_email($email) & $this->validate_password($password)) {
$this->User->register($username, $email, $this->password($password));
return TRUE;
}
return FALSE;
}
在处理整数时,在幕后有一点语义上的区别;然而,当使用布尔值时,唯一的区别是所有的方法都将被调用,而不管它们每个的返回值是什么。
对我来说,即使你可以,你也不应该这样做,原因有二:
1)你让你的代码变得比你需要的更复杂,更难阅读,更难理解,更难返回。下一个试图弄明白它的作用的人几乎肯定是你。
2)如果您需要将它们全部作为业务逻辑的一部分执行,那么应该以某种方式清楚地封装。例如,您可以将这三个函数包装在另一个函数中,该函数的返回语句是条件检查。这将意味着在三个变量之上创建另一个函数:-)
例如:function nicelyEncapsulatedBusinessLogic()
{
a = test1();
b = test2();
c = test3();
d = test4();
return a && b && c && d;
}
function test()
{
if(nicelyEncapsulatedBusinessLogic())
{
return true;
}
return false;
}
您可以尝试使用位操作符&而不是&&(逻辑)-应该运行所有的命令,然后计算if(…)
我不知道-您可以将函数重构为这样的东西(虽然有点长,但可以完成工作):
$return = true;
if( !$this->validate_username($username))
{
$return = false;
}
if( !$this->validate_email($email))
{
$return = false;
}
if( !$this->validate_password($password))
{
$return = false;
}
if( $return)
{
$this->User->register($username, $email, $this->password($password));
}
return $return;
问题是你想避免布尔运算符的短路行为。
。,因为如果第一个表达式为假,&&
将为假,它将跳过第二个表达式,认为没有必要。
您需要重写函数以确保调用剩余的检查。