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 语句中使用。