从 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 语句(或类似语句)中调用函数

  1. 有 3 个 "side effects" 称为副作用 ;-) 稍后
  2. 请记住,大多数语言只会评估 IF 子句,直到明确是 TRUE 还是 FALSE(一个非常简单的描述),这意味着如果第一个值已经是 FALSE,则不会评估第二个值 - 当 AND 或当 OR
  3. 时为真

所以在你的情况下它看起来像 $this->name() 使输出 'valid name' 但 returns 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) {
  // ...
}