【问题标题】:Multiple conditional php with OR logical operator not returning false具有OR逻辑运算符的多个条件php不返​​回false
【发布时间】:2014-10-06 11:21:47
【问题描述】:

我在 php 中有一个条件语句,当我添加一个 OR 逻辑运算符时它不能按预期工作,在下面的示例中它返回我试图阻止它执行的代码。

单独的每个语句在它们在一起时不起作用,因为我在下面有它们。为每个条件重复代码似乎效率低下。

if (!is_sp_post_type('profile') || !is_category(array('previews','reviews')) || !is_single(array('previews','reviews'))) { //do stuff };

我已经阅读了这个答案Is there a short-circuit OR in PHP that returns the left-most value?,但我仍然卡住了

【问题讨论】:

  • 您实际期望的逻辑是什么?如果任何一个主要测试失败,你想“做点什么”?我的意思是如果它不是 type=>profile OR not category=> reviews OR not single=> reviews?
  • 我想做一些不满足任何主要条件的东西。

标签: php wordpress conditional


【解决方案1】:

只需使用AND (&&) 运算符。

OR 运算符只需要一个 true 来执行条件,而 AND 运算符需要所有语句都为 true。

我不能百分百确定您要达到的目标,但我还建议您重新查看您的 NOT (!) 运算符以及它在您的代码中的使用方式

【讨论】:

  • 您是否认为 OP 存在逻辑错误?最好要求澄清。
  • 你真的了解运营商的工作方式吗?我不认为你指责我并因为你的指责而否决了我的回答,这纯粹是一个逻辑问题。我不需要对此进行任何澄清。这不是我关于 wordpress 这类主题的第一个问题
  • 您自己说,您不确定.. OP 谈到“为每个条件重复代码的效率低下”,所以看起来他实际上想要 OR 语义.. 但谁知道(所以我问)。
  • do stuff 代码显示最后一次更新帖子的日期。此功能适用于许多不同页面的模板(单个帖子模板和存档模板)。我试图阻止此功能仅显示在其中几个页面上。 if (!is_sp_post_type('profile') || !is_category(array('previews','reviews')) || !is_single(array('previews','reviews')) { echo '<div class="sp-updated-on">Last updated ' . human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago</div>'; }; 据我了解,这需要一个 OR 运算符。
  • @fast 如果您现在可以删除您的反对票,那就太好了。下一次,请在您对答案投反对票之前三思。谢谢
【解决方案2】:

我傻了,应该用&&

if (!is_sp_post_type('profile') && !in_category(array('previews','reviews')) && !is_single(array('previews','reviews'))) { //do stuff }

感谢Pieter Goosen 指出这一点 - 他删除了他的答案,但我无法选择它。

【讨论】:

  • 非常适合发帖并给我一些荣誉。赞赏。 +1
  • 当然,我已经接受了您的回答并 +1。丹基 :)
猜你喜欢
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多