If语句设置了变量,但语法错误


If statement set variable but syntax error

语句出现语法错误

$catlist = if (function_exists('put_cat_icons')) {
put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0'));
} else {
wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);
}​​​​​​​

如果我删除$catlist =,我不会得到任何错误。代码中有什么问题?我可以设置这样的变量吗?

if作为赋值无效。不知道,你从哪里得到的。但是,您可以在这里使用三元运算符

$catlist = function_exists('put_cat_icons')
    ? put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0'))
    : wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);

此外,当您查看代码时,您可能会意识到wp_list_categories()-调用在两种情况下都是相同的

$catlist = wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);
if (function_exists('put_cat_icons')) $catlist = put_cat_icons($catlist);

我建议将代码重新排列一点

if (function_exists('put_cat_icons')) {
    $catlist = put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0'));
} else {
    $catlist = wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);
}​​​​​​​

不能为条件的结果赋值-它们必须是独立的。可能你的意思是:

if (function_exists('put_cat_icons')) {
    $catlist = put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0'));
} else {
    $catlist = wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);
}​​​​​​​

你可能混淆了普通条件和三元条件,后者确实允许赋值。

$something = 1 < 2 ? 'foo' : 'bar';

从外观上看,您将一个普通的if语句与三元运算符混合在一起,三元运算符看起来应该类似于$someVar = (condition) ? "TRUE VALUE" : "FALSE VALUE";

在您的案例中使用三元运算符看起来像这样:

$catlist = (function_exists('put_cat_icons')) ? 
    put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0')) : 
    wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);

我认为这不是设置变量的正确方法。你想做这个吗

$catlist = (function_exists('put_cat_icons')) ? put_cat_icons( wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id.'&echo=0')):
wp_list_categories('echo=0&orderby=id&show_count=1&title_li=&child_of=' . $cat_id);