【问题标题】:don't initialize variable if isset returns false如果 isset 返回 false,则不初始化变量
【发布时间】:2012-07-30 03:44:08
【问题描述】:

我有这样一个简单的声明:

$data['title']  =   isset($domain['title']) ? $domain['title'] : '';

没关系。然后在使用 codeigniter 活动记录的插入查询中使用数据数组。现在我想问有没有一种方法,如果isset返回false,那么不要初始化$data['title']。

我知道这里的替代方案

if(isset($domain['title'])){
   $data['title'] = $domain['title'];
}

我想知道我们如何用上面的指令做同样的if

【问题讨论】:

  • 这是使用三元的糟糕案例。任何允许您在三元中执行此表达式的解决方案充其量都是不清楚和令人困惑的代码。

标签: php codeigniter isset


【解决方案1】:

我能看到的最短方法是:

if (isset($domain['title'])) $data['title'] = $domain['title'];

但坚持你的第二个例子,它更具可读性。

【讨论】:

    【解决方案2】:

    您可以这样做,但使用 if 更具可读性。

    isset($domain['title']) && ($data['title'] = $domain['title']);
    

    编辑: 使用循环的示例。

    foreach (array('title', 'body', 'footer') as $key) {
      if (isset($domain[$key])) {
       $data[$key] = $domain[$key];
      }
    }
    

    【讨论】:

    • 但是如果我有 7 或 8 个字段,我会使用 7 或 8 吗?我需要简单的 i 行代码来处理。整洁干净
    • @raheelshan 你可以使用循环。
    • 你能举个循环的例子吗
    【解决方案3】:

    你可以这样做:

    $data['title'] = !isset($domain['title'] ? : $domain['title'];
    

    在 php 5.3 或更高版本中。

    但我不推荐它,因为它是丑陋的混乱代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多