PHP 不处理 OR 中的第二个条件
PHP not processing second condition in OR
我搜索了很多,除了编写更大的代码之外找不到任何解决方案。
我需要的是,仅当设置了两个 $btn_ 字符串之一时才输出。
在当前状态下,如果 $btn_orange = get_field('btn_orange')
等于 true,
( $btn_black = get_field('btn_black')
未被处理,而 get_field('btn_black')
returns 一个好的值。
简而言之:如果 $btn_orange
已设置,则未设置 $btn_black
。
这是我当前的代码:
<?php if( ( $btn_orange = get_field('btn_orange') ) || ( $btn_black = get_field('btn_black') ) ): ?>
<div class="buttons">
<?php if($btn_orange && ( $btn_orange_url = get_field('btn_orange_url') ) ): ?>
<a class="btn btn-lg btn-primary" href="<?php echo $btn_orange_url; ?>"><?php echo $btn_orange; ?></a>
<?php elseif($btn_orange): ?>
<span class="btn btn-lg btn-primary"><?php echo $btn_orange; ?></span>
<?php endif;?>
<?php if($btn_black && ( $btn_black_url = get_field('btn_black_url') ) ): ?>
<a class="btn btn-lg btn-black" href="<?php echo $btn_black_url; ?>"><?php echo $btn_black; ?></a>
<?php elseif($btn_black): ?>
<span class="btn btn-lg btn-black"><?php echo $btn_black; ?></span>
<?php endif;?>
</div>
<?php endif; ?>
现在我可以在单独的 if 块中分离 btn_orange
和 $btn_black
。
但是如果两者之一或两者都设置为 get_field()
.
的值,我需要输出 <div class="buttons">
我可以在第一个 if 语句中完成这个吗?
编辑: 问题已解决。我不应该在 IF
语句中放入类似 $x = func($parameter)
的内容,而是首先按照 dougtesting.net 指出的那样首先填充字符串。
对于条件检查,您必须使用 ==
而不是 =
if( ( $btn_orange == get_field('btn_orange') ) || ( $btn_black == get_field('btn_black')
您正在使用单个 = 来检查您的 if 语句 ==
在条件内分配值不是一个好主意。条件并不意味着这样做(这就是为什么大多数其他编程语言明确禁止这样做的原因)。
这样做:
<?php $btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if ($btn_orange || $btn_black):
?>
PHP(以及大多数其他编程语言)如果没有可能满足或不满足条件的方法,将放弃条件评估。不这样做会浪费计算时间和资源。
还要考虑以下代码:
if (isset($array["index"])) && $array["index"] == "something)
如果要评估两个条件,此代码将中断,因为如果未设置索引,则访问它会引发错误。
当 $btn_orange 为真时,$btn_black 未填充 get_field('btn_black') 的值,因为 PHP 停止计算余数IF 语句,因为第一部分为真。
最佳解决方案是像这样在 IF 语句之前填充变量...
$btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if($btn_orange || $btn_black) {
etc...
}
然后两个变量都可以在 if 语句中使用。
我搜索了很多,除了编写更大的代码之外找不到任何解决方案。 我需要的是,仅当设置了两个 $btn_ 字符串之一时才输出。
在当前状态下,如果 $btn_orange = get_field('btn_orange')
等于 true,
( $btn_black = get_field('btn_black')
未被处理,而 get_field('btn_black')
returns 一个好的值。
简而言之:如果 $btn_orange
已设置,则未设置 $btn_black
。
这是我当前的代码:
<?php if( ( $btn_orange = get_field('btn_orange') ) || ( $btn_black = get_field('btn_black') ) ): ?>
<div class="buttons">
<?php if($btn_orange && ( $btn_orange_url = get_field('btn_orange_url') ) ): ?>
<a class="btn btn-lg btn-primary" href="<?php echo $btn_orange_url; ?>"><?php echo $btn_orange; ?></a>
<?php elseif($btn_orange): ?>
<span class="btn btn-lg btn-primary"><?php echo $btn_orange; ?></span>
<?php endif;?>
<?php if($btn_black && ( $btn_black_url = get_field('btn_black_url') ) ): ?>
<a class="btn btn-lg btn-black" href="<?php echo $btn_black_url; ?>"><?php echo $btn_black; ?></a>
<?php elseif($btn_black): ?>
<span class="btn btn-lg btn-black"><?php echo $btn_black; ?></span>
<?php endif;?>
</div>
<?php endif; ?>
现在我可以在单独的 if 块中分离 btn_orange
和 $btn_black
。
但是如果两者之一或两者都设置为 get_field()
.
<div class="buttons">
我可以在第一个 if 语句中完成这个吗?
编辑: 问题已解决。我不应该在 IF
语句中放入类似 $x = func($parameter)
的内容,而是首先按照 dougtesting.net 指出的那样首先填充字符串。
对于条件检查,您必须使用 ==
而不是 =
if( ( $btn_orange == get_field('btn_orange') ) || ( $btn_black == get_field('btn_black')
您正在使用单个 = 来检查您的 if 语句 ==
在条件内分配值不是一个好主意。条件并不意味着这样做(这就是为什么大多数其他编程语言明确禁止这样做的原因)。
这样做:
<?php $btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if ($btn_orange || $btn_black):
?>
PHP(以及大多数其他编程语言)如果没有可能满足或不满足条件的方法,将放弃条件评估。不这样做会浪费计算时间和资源。
还要考虑以下代码:
if (isset($array["index"])) && $array["index"] == "something)
如果要评估两个条件,此代码将中断,因为如果未设置索引,则访问它会引发错误。
$btn_black 未填充 get_field('btn_black') 的值,因为 PHP 停止计算余数IF 语句,因为第一部分为真。
最佳解决方案是像这样在 IF 语句之前填充变量...
$btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if($btn_orange || $btn_black) {
etc...
}
然后两个变量都可以在 if 语句中使用。