返回后继续执行


Do While continues after return

我在这里使用WordPress。我有以下函数,它是从函数外部调用的,然后通过 do while 循环递归调用自己。我需要在这里使用 do while 因为当 while 条件为真时我需要一次迭代。

该函数最终满足 if 语句中的条件(在 do...while 内(,但是即使我有一个return语句,它也会继续无休止地迭代最后一次迭代。

public function parent_category_has_fiance($cat_id) {
    global $wpdb;
    $terms = $wpdb->get_row("
                        SELECT
                            term_id, 
                            parent 
                        FROM
                            $wpdb->term_taxonomy
                        WHERE 
                            term_id = $cat_id
                            ");
    do {
        $parent_id = $terms->parent;
        $term_id = $terms->term_id;
        // test if a parent category has a rule
        $does_finance_exist = $this->has_finance($term_id);
        if($does_finance_exist == true) {
            echo "Found parent finance";
            return true;            
        }
        $this->parent_category_has_fiance($parent_id);
    } while ((int)$terms->parent > 0);
    return false;
}   

谁能在这里提出这个问题?

我认为

您必须添加这样的东西:

$parent_id = $terms->parent;
if( !$parent_id ) return False;

我不知道$terms->父级的类型,因此如果返回的值在失败时≠ False,则必须更改条件。

如果没有此修改,您的递归调用也会在当前$cat_id没有$parent_id时执行。

否则,您可以检查结果$terms如果为空,则返回False

编辑:

如果没有调用的 sigle 方法,很难找到解决方案(也许添加 wordpress 标签会有所帮助!(,但也许这个简单的代码修改可以解决您的问题:

while( (int)$terms->parent > 0 )
{
    (...)
}