Php 是否有一种方法可以执行if中的每个函数,即使其中一个函数返回false?
我想知道除了将每个函数设置为一个变量,然后在Php 是否有一种方法可以执行if中的每个函数,即使其中一个函数返回false?,php,function,if-statement,Php,Function,If Statement,我想知道除了将每个函数设置为一个变量,然后在if中设置它以执行所有函数之外,是否还有什么可以做的,即使第一个函数返回false(或第二个),结束if public function register($username, $email, $password) { if($this->validate_username($username) && $this->validate_email($email) && $this->valida
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,所有函数都将被执行
这没什么大不了的-知道有没有办法就好了。我不知道-你可以将函数重组成这样(虽然有点长,但可以完成任务): 您可以使用(
&
),而不是逻辑AND运算符(&&
),逻辑AND运算符执行以下操作:
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;
}
在处理整数时,在幕后有一点语义上的差异;但是,在使用布尔运算时,唯一的区别是,无论每个方法返回的值是多少,都将调用所有方法。您可以尝试使用位运算符&而不是&&(逻辑)-该运算符应运行所有命令,然后计算if(…)问题是您希望避免布尔运算符的短路行为 i、 例如,因为如果第一个表达式为false,则
&&
将为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;
}
另外,从技术上讲,“有效”类型的函数不应该执行业务逻辑,它们应该只是检查有效性。否则,您将混淆各职能部门的职责。目前,您的validate_用户名所做的似乎不仅仅是验证它…?是的,它所做的不仅仅是验证,它还为模板系统设置了一个警告,以便用户知道他们做错了什么<代码>$this->View->set_警告('error_username','Sorry,但该用户名已被使用','error')代码>另外,感谢您提供的提示。
test()
是否意味着要成为不必要代码的示例?调用test()
将始终产生与调用nicely-encloseddedbusinesslogic()
Well-spoted Null:-)相同的结果,但是测试方法只是为了显示Josh如何执行评估,同时确保执行所有操作。事实上,我认为该测试将根据if语句的结果执行一些操作。不过很对!
function nicelyEncapsulatedBusinessLogic()
{
a = test1();
b = test2();
c = test3();
d = test4();
return a && b && c && d;
}
function test()
{
if(nicelyEncapsulatedBusinessLogic())
{
return true;
}
return false;
}