【问题标题】:How to make quick judgement and assignment without isset()?如何在没有isset()的情况下快速判断和赋值?
【发布时间】:2014-10-21 01:18:52
【问题描述】:

我厌倦了使用如下代码:

$blog = isset($_GET['blog']) ? $_GET['blog'] : 'default';

但我不能使用:

$blog = $_GET['blog'] || 'default';

有什么方法可以在不使用isset() 的情况下做到这一点?

【问题讨论】:

  • Psst - 你没听我说,但如果你要分配 null 并且你不介意违反最佳实践,你可以取消通知并使用 @ 987654325@ [退回到阴影中...]
  • ^^^ 实际上我永远不会这样做。

标签: php ternary-operator isset


【解决方案1】:

您必须等待下一版本的 PHP 才能获得 coalesce operator

// Uses $_GET['user'] if it exists -- or 'nobody' if it doesn't
$username = $_GET['user'] ?? 'nobody';

// Loads some data from the model and falls back on a default value
$model = Model::get($id) ?? $default_model;

【讨论】:

  • 伙计,即将推出的空合并运算符是 PHP 多年来获得的最令人兴奋的功能。
  • 我可以让这段代码更短$u=$_GET['u'] ?? 'n'; $m=Model::get($id) ?? $d_m;lol
  • @Fred-ii- 你现在需要做的就是把它变成二进制 ;)
  • 我会让 OP 来做,哈哈 - 嘿.. seen this? 有什么机会? ;)
  • @Fred-ii- 哇。确实有什么可能性?很高兴您看到了这一点,否则我们将重新开始讨论。
【解决方案2】:

编写一个辅助函数。

function arrayValue($array, $key, $default = null)
{
    return isset($array[$key]) ? $array[$key] : $default;
}

用法:

$blog = arrayValue($_GET, 'blog');

【讨论】:

    【解决方案3】:

    不,没有比这更短的方法了。您可以创建一个处理 $_POST 和 $_GET 变量的类,并在您调用博客时使用它。

    例子:

    $blog = Input::put("blog");

    输入类将具有一个静态方法,该方法将确定输入何时具有 $_POST 和 $_GET 或空值。

    【讨论】:

      【解决方案4】:

      你可以只写一个自定义助手:

      function get($name, $default=null){
          return isset($_GET[$name]) ? $_GET[$name] : $default;
      }
      
      $blog = get('blog', 'default');
      

      或者,您有filter extension,例如:

      $blog = filter_input(INPUT_GET, 'blog') ?: 'default';
      

      它并没有明显缩短,但允许进一步验证和清理(并且包装在自定义函数中也很简单)。

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        相关资源
        最近更新 更多