从 if 语句内部调用函数,只有第一个返回值
Calling functions from inside if statement, just first one returning values
这 returns 有效数据。
if($this->empty_check()){
$this->name(); // Valid name
$this->email(); //Valid email
}
我有两种方法,它们都能完美运行,但是当我将它们放入 if 语句中以检查它们是否 return true just first on 正在运行时。我尝试删除第一个方法 ($this->name()) 显然第二个开始工作..但不是同时。
这就是导致我上面描述的问题的原因。
if($this->name() and $this->email()){
echo "valid data!";
}
IMO 它应该回显有效名称、有效电子邮件和有效数据,但只回显有效名称。
小心从 IF 语句(或类似语句)中调用函数
- 有 3 个 "side effects" 称为副作用 ;-) 稍后
- 请记住,大多数语言只会评估 IF 子句,直到明确是 TRUE 还是 FALSE(一个非常简单的描述),这意味着如果第一个值已经是 FALSE,则不会评估第二个值 - 当 AND 或当 OR
时为真
所以在你的情况下它看起来像 $this->name()
使输出 'valid name' 但 return
s false/0 或类似的。
-
副作用
这些有时真的很糟糕,所以要避免它们..这个例子现在适合你:
if (++x > 2 or ++y >5) ...
看看那个,想想当 x 已经是 2 时会发生什么。
您 运行 短路。
条件语句旨在检查值,而不是执行操作,因此对它们进行了优化,使得 if (false && x)
意味着 x
根本不会被评估;它不能改变总体条件的含义,因为左侧已经有 false
。
您对 name()
的调用一定是失败了,因此对 email()
的调用甚至没有发生。
我建议不要将这些调用捆绑到条件中。
$success = $this->name();
$success &= $this->email();
if ($success) {
// ...
}
这 returns 有效数据。
if($this->empty_check()){
$this->name(); // Valid name
$this->email(); //Valid email
}
我有两种方法,它们都能完美运行,但是当我将它们放入 if 语句中以检查它们是否 return true just first on 正在运行时。我尝试删除第一个方法 ($this->name()) 显然第二个开始工作..但不是同时。
这就是导致我上面描述的问题的原因。
if($this->name() and $this->email()){
echo "valid data!";
}
IMO 它应该回显有效名称、有效电子邮件和有效数据,但只回显有效名称。
小心从 IF 语句(或类似语句)中调用函数
- 有 3 个 "side effects" 称为副作用 ;-) 稍后
- 请记住,大多数语言只会评估 IF 子句,直到明确是 TRUE 还是 FALSE(一个非常简单的描述),这意味着如果第一个值已经是 FALSE,则不会评估第二个值 - 当 AND 或当 OR 时为真
所以在你的情况下它看起来像 $this->name()
使输出 'valid name' 但 return
s false/0 或类似的。
-
副作用
这些有时真的很糟糕,所以要避免它们..这个例子现在适合你:
if (++x > 2 or ++y >5) ...
看看那个,想想当 x 已经是 2 时会发生什么。
您 运行 短路。
条件语句旨在检查值,而不是执行操作,因此对它们进行了优化,使得 if (false && x)
意味着 x
根本不会被评估;它不能改变总体条件的含义,因为左侧已经有 false
。
您对 name()
的调用一定是失败了,因此对 email()
的调用甚至没有发生。
我建议不要将这些调用捆绑到条件中。
$success = $this->name();
$success &= $this->email();
if ($success) {
// ...
}