【问题标题】:In PHP does return false bubble up?在 PHP 中是否返回 false 冒泡?
【发布时间】:2016-12-23 01:01:20
【问题描述】:

我有一个类在 php 中有一些方法。

一个公共方法调用一个受保护的方法。如果受保护的方法返回false,公共方法是否会返回false而不继续?

public static function a() { 
    $class = getClass();
    // some more code...
}

protected static function getClass() {
    $classList = self::find_by_sql("
        SELECT *
          FROM ".self::$table_name."
         WHERE Class_Closed = FALSE
         ORDER BY Start_Date ASC
    ;");

    if (empty($classList)) {
        return false;
    } else {
        return $classList[0];
    }
}

【问题讨论】:

    标签: php return


    【解决方案1】:

    没有。 $class 将有一个 false 值,但如果您希望方法终止并立即返回该值,您仍然需要从 YourClass::a() 返回它。 return 仅在调用它的函数/方法的范围内。

    public static function a(){ 
      $class = getClass();
      if (!$class) {
          return false; // or return $class;
      }
      some more code...
    }
    

    【讨论】:

    • 所以如果我想让方法 a 返回 false 我需要检查 $class 是否为 false 然后返回 false?
    • 没有。三元运算符不太像那样工作。但你可以这样做:if (!$class) return false;,如果你想让它成为一个单线。
    • 谢谢!真的很有帮助。
    【解决方案2】:

    没有。 return 也不例外,也没有冒泡。如果你没有明确的return,那么就有一个隐含的return null;

    php > function foo() { }
    php > var_dump(foo());
    NULL
    php > function bar() { $x = 42; }
    php > var_dump(bar());
    NULL
    php > function baz() { return 'hi mom'; }
    php > var_dump(baz());
    string(6) "hi mom"
    

    无论您如何/在何处定义函数,包括作为类方法,这都是正确的:

    php > class foo { function bar() { } }
    php > $foo = new foo();
    php > var_dump($foo->bar());
    NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 2017-06-29
      • 2011-04-01
      • 2023-03-28
      • 2020-12-27
      相关资源
      最近更新 更多