从if语句内部调用函数,只返回第一个返回值

时间:2015-01-04 01:49:04

标签: php return

返回有效数据。

    if($this->empty_check()){
            $this->name(); // Valid name
            $this->email(); //Valid email
        }

我有两种方法,它们都运行得很完美,但是当我将它们放入if语句中时,检查它们是否都在第一次运行时返回true。我尝试删除第一种方法($ this-> name()),显然第二种方法开始工作..但不是同时进行。

这就是导致上述问题的原因。

        if($this->name() and $this->email()){
            echo "valid data!";
        }

IMO它应该回显有效名称,有效电子邮件和有效数据,但只回显有效名称。

2 个答案:

答案 0 :(得分:1)

您正在遇到短路

条件设计用于检查值,而不是执行操作,因此它们已经过优化,因此if (false && x)表示x根本不会被评估;它不能改变总体条件的含义,因为左侧已经有false

您对name()的来电必定失败,因此拨打email()的电话甚至无法发生。

我建议将这些调用绑定到条件中。

$success  = $this->name();
$success &= $this->email();

if ($success) {
  // ...
}

答案 1 :(得分:0)

小心在IF语句(或类似的)中调用函数

  1. 是"副作用"被称为副作用;-)稍后
  2. 请记住,大多数语言仅评估IF子句,直到明确为TRUE或FALSE(非常简单的描述),这意味着如果第一个值已经为FALSE则不计算第二个值 - 当AND或者为真时OR
  3. 因此,在您的情况下,$this->name()看起来像输出有效的名称'但是return s false / 0或类似。

    -

    副作用

    有时候这些确实很糟糕,所以请避免使用它们。这个例子现在就是你的:

    if (++x > 2 or ++y >5) ...
    

    看看那个并考虑当x已经是2时会发生什么。