【问题标题】:Assign variable within condition if true如果为真,则在条件内分配变量
【发布时间】:2013-05-10 23:26:35
【问题描述】:

我知道你可以在这样的条件下分配一个变量:

if ($var = $foo)

但是我不需要对条件本身做任何事情,所以我经常留下空括号。如果$footrue,我可以简单地分配$var,而无需稍后再做其他事情吗?

如果$footrue 但如果$foofalse,我也可以将$var 分配给$foo 吗?喜欢:

if ($var = !$foo) {
    if ($var = !$bar) {
        //Etc...
    }
}

基本上我想要更多的后备/默认设置。

【问题讨论】:

  • Emmmm,再来一次......?
  • 你可以使用 if ($foo) ,这将在 foo 为真时起作用。
  • 您没有分配“条件”。无论$foo 的值如何,您都在分配。因此,如果您只想用$foo 覆盖$var,以防$footruthy。您必须移动作业。或者做类似if ($foo && $var = $foo) {} 之类的事情,尽管在我看来后者真的很糟糕。
  • @Yoshi 我的问题更多的是在分配$var 的值之后会发生什么。因此,如果它未能分配,有一个后备。答案证明了我正在尝试做的事情。感谢您的评论。

标签: php if-statement conditional-statements


【解决方案1】:

@chandresh_cool 的建议是正确的,但要允许多种可能性/回退,您必须嵌套三元表达式:

$var = ($foo == true) ? $foo: 
       ($bar == true) ? $bar: 
       ($fuzz == true) ? $fuzz:
       $default;

注意:前 3 行以冒号而不是分号结尾。

但是更简单的解决方案是执行以下操作:

$var = ($foo||$bar||$fuzz...);

【讨论】:

  • 您更简单的解决方案正是我正在寻找的。它短小精悍,可以满足我的需要:将 $var 设置为它可以找到的第一个正值。
  • 如果您选择第一个选项,请不要执行“== true”,只需执行“$var = ($foo) ? $.....”跨度>
【解决方案2】:

虽然这是一个非常古老的帖子。伪造值的后备逻辑可以这样编码。

$var = $foo ?: $bar ?: "default";

在这种情况下,当$foo 是一个伪造值(如假、空字符串等)时,它将回退到$bar,否则它使用$foo。 如果 bar 是一个伪造的值,它将回退到字符串 default

请记住,这适用于伪造的值,而不仅仅是true

示例:

$foo = "";
$bar = null;
$var = $foo ?: $bar ?: "default";  

$var 将包含文本 default,因为空字符串和 null 被视为“假”值。

[更新]

在 php 7 中,您可以使用新的 null 合并运算符:??,它还使用 isset() 检查变量是否存在。当您在数组中使用键时,这很有用。

例子:

$array = [];
$bar = null;
$var = $array['foo'] ?? $bar ?? "default";

在 php 7 之前,这会给出Undefined index: foo 通知。但是对于空合并运算符,该通知不会出现。

【讨论】:

  • @jconder - 我将您的编辑回滚到这个答案。 Leroy 说“否则它使用$foo”,但您所做的编辑完全无效。 Leroy 在这里有意使用 两个 三元运算符(每个运算符的第一个表达式为空),允许 3 种可能的结果:$foo$bar"default",而不是使用单个三元只能返回 2 个可能结果的运算符:$bar"default"
  • 是的,你是对的,我的错,我错过了帖子的全部要点。
  • 这使得 if 表达式更清晰。我正在使用它来检查 WordPress $is_entry = is_singular( 'myentry' ) ?: is_post_type_archive( 'myentry' ) ?: false; 中的自定义帖子类型。现在我可以使用if ( $is_entry && $other_condition ) 来确定当前页面是否属于我的帖子类型,而不会使 if 表达式变得太难看。
  • 在 php7 中有一个新的 null 合并运算符:??,它还检查变量是否存在,如 isset()。当您在数组中使用键时,这很有用。例如:$var = $array['key'] ?? $bar ?: "default"。现在当$array 中的key 不存在时,它不会抛出任何错误。因为它还会查看key 是否存在。
【解决方案3】:

相反,您可以像这样使用三元运算符

$var = ($foo == true)?$foo:"put here what you want";

【讨论】:

  • 它仍然有点啰嗦,但它有效,所以我会给你 +1 的答案。
【解决方案4】:

你可以这样赋值:

$var = $foo;

也可以在 if 语句中设置它们,PHP 将评估您刚刚分配的结果 $var。

我真的不明白你的问题,但你可以这样做:

if(!($var = $foo)){
   //something else.
}

【讨论】:

  • 您的 if 语句代码看起来像我想要做的,但 RobJ 的回答更好。我仍然会为此给你 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2020-06-25
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多