我在这里使用WordPress。我有以下函数,它从函数外部调用,然后通过do while循环递归调用自身。我需要在这里使用do,因为当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;
}
有人可以在这里提出这个问题吗?
答案 0 :(得分:1)
我认为你必须添加这样的东西:
$parent_id = $terms->parent;
if( !$parent_id ) return False;
我不知道$ terms-> parent的类型,所以如果失败时返回值为≠False,则必须更改条件。
如果没有此修改,当当前$parent_id
没有$cat_id
时,也会执行递归调用。
否则,您可以查看$terms
结果,如果为空,则返回False
。
很难找到一个解决方案而不知道调用的sigle方法(也许添加wordpress标签可以帮助!),但也许这个简单的代码修改可以解决你的问题:
while( (int)$terms->parent > 0 )
{
(...)
}