【问题标题】:Setting default values (conditional assignment)设置默认值(条件赋值)
【发布时间】:2010-09-14 20:29:37
【问题描述】:

在 Ruby 中,您可以轻松地为变量设置默认值

x ||= "default"

如果 x 为 nil 或 false,上述语句会将 x 的值设置为“默认”

PHP中是否有类似的快捷方式或者我必须使用更长的形式:

$x = (isset($x))? $x : "default";

有没有更简单的方法在 PHP 中处理这个问题?

【问题讨论】:

    标签: php ruby logical-operators


    【解决方案1】:

    从 PHP 7.0 开始,您还可以使用 null coalesce operator

    // PHP version < 7.0, using a standard ternary
    $x = (isset($_GET['y'])) ? $_GET['y'] : 'not set';
    // PHP version >= 7.0
    $x = $_GET['y'] ?? 'not set';
    

    【讨论】:

    • “语法糖”确实:) 文档状态操作符可以被链接:$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
    【解决方案2】:

    从 PHP 5.3 开始,您可以使用三元运算符同时省略中间参数:

    $x = $x ?: 'default';
    

    【讨论】:

    • 为什么这种优雅不为人所知?我通常觉得我对 PHP 有近乎迂腐的知识,但这个宝石似乎已经逃过了我的视线。谢谢!!
    • 虽然是 PHP 5.3。我等不及它是 Wordpress 的必需标准,因为我开发了 Wordpress 主题。但那是一个糟糕的三元运算符:)
    • 这样做的一个问题是 PHP 可能会抛出一个关于未定义变量的通知,如果你经常这样做,它会使输出/日志混乱,具体取决于你设置的报告级别。
    • 我喜欢这种语法,但我收到了undefined variable 错误消息。
    • 啊!但是如果 $x 的布尔值是 false 怎么办?我不希望它被分配默认值...
    【解决方案3】:

    我将它包装在一个函数中:

    function default($value, $default) {
        return $value ? $value : $default;
    }
    // then use it like:
    $x=default($x, 'default');
    

    有些人可能不喜欢它,但如果你在做一个疯狂的函数调用,它会让你的代码更干净。

    【讨论】:

    • 将其包装在函数调用中的“问题”是所有参数都被评估。在 a = b || c, 只有当 b 为假时,c 才会被评估。这可能是也可能不是您想要的。
    • 希望您实际上并没有在作业中调用副作用方法。
    • @KaptajnKold 你可以通过 ref 传递,那么参数将不会被 evald ;)
    【解决方案4】:
    isset($x) or $x = 'default';
    

    【讨论】:

    • 只要我们不认为 $x 的错误值是“设置”,它就会起作用。
    • $x === false and $x = 'default'; isset($x) 或 $x = 'default';
    • 我真的很喜欢isset($x) or $x = 'default'; 版本;你应该更新你的答案。 :-)
    • @Adam - 这是真的,但对于 ruby​​ 的 "||=" 表示法也可以这样说:x = false; x ||= true; x #=&gt; true
    【解决方案5】:

    我认为你的长格式已经是 php 的快捷方式了......我不会使用它,因为它不好阅读

    一些注意事项: 在symfony框架中大部分的“get”-Methods都有第二个参数来定义一个默认值...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-26
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2015-05-14
      • 2010-09-23
      相关资源
      最近更新 更多