【问题标题】:Does anyone know what this line of code means?有谁知道这行代码是什么意思?
【发布时间】:2016-10-20 11:37:51
【问题描述】:

我有这行代码:

    $data['page'] =($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

我对三元运算很熟悉,但是我不太清楚这行代码是做什么的。

【问题讨论】:

  • 是的,我愿意!......在手册中查找三元运算符
  • if ($this->uri->segment(3) == true) { $data['page']=$this->uri->segment(3)} else {$data['page']=0;}
  • 你可以在这里查看这个问题的答案-stackoverflow.com/questions/19293892/…
  • 在你的三元运算符条件不存在所以像这样使用 $data['page'] = !empty($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

标签: php codeigniter


【解决方案1】:
if ($this->uri->segment(3)){
    $data['page'] = $this->uri->segment(3);
} else {
    $data['page'] = 0;
}

【讨论】:

    【解决方案2】:

    好吧,如果 $this->uri->segment(3) 的计算结果不是假的,那么 $data['page'] 将被设置为其内容,否则为 0。

    如你所说,如果你真的知道三元运算,你就会知道。

    这是为变量建立默认值的一种非常常见的方法。

    【讨论】:

    • 其实我不明白的是 $this->uri->segment(3) 部分
    • 那你一开始就应该这么说。查看您的代码所在的类,它应该包含一个名为uri 的方法,并查看代码的作用。
    • $this->uri->segment(3) 因为默认情况下 CI 使用斜杠而不是查询字符串,斜杠后的每个值都表示一个段,所以上面的代码只不过是在你的 uri
    【解决方案3】:

    $this->uri->segment(3) 似乎返回页码,如果可能的话。

    条件检查结果是否为真(有效数字> 0 也为真)并将结果分配给$data['page']。如果结果为意外或无效(在这种情况下很可能为 false 或 null),则改为应用 0。

    这可确保$data['page'] 始终获得正确的值。

    你也可以这样写:

    $data['page'] = 0;
    if (is_numeric($this->uri->segment(3)) && $this->uri->segment(3) > 0) {
        $data['page'] = $this->uri->segment(3);
    }
    

    【讨论】:

      【解决方案4】:
      $value = <test condition>? value to use if True, : value to use if False
      

      如果是

      $data['page'] = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
      

      根据用户指南(我们都会不时阅读...),如果存在,$this->uri->segment(3) 将返回 uri 的段 3 的值,否则将返回 NULL .

      /控制器/方法/参数 段 1 = 控制器 段 2 = 方法 Segment 3 = parameter ,之后我们可以有任意数量的参数,所以你可以有更多的segment..

      因此,如果 uri 包含第 3 段(即 /controller/method/parameter ),则“参数”值将作为第 3 段返回,并且在上述测试中,它将评估为 Not NULL 或 True 并且$data['page'] 将设​​置为 ? 之后定义的值在这种情况下,就是它本身,即 $this->uri->segment(3) 的值。

      如果 uri 不包含段 3(即 /controller/method ),则 $this->uri->segment(3) 将评估为 NULL 或 False 并且 : 之后的值分配给 $data[ 'page'],在本例中为 0。

      因此,在这种情况下,您可以返回任何您喜欢的值而不是 NULL。

      根据 CI 3.1.0 的用户指南,您可以传递第二个参数来执行相同的任务。

      所以不是

      $data['page'] =($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
      

      你使用

      $data['page'] = $this->uri->segment(3,0);
      

      现在,由于此示例似乎将页面名称作为 uri 的第三段传递,因此将默认值或失败值从 Null 更改为 0 似乎很困难。

      您会想要对此进行测试...即我是否获得了页面名称。 如果我这样做了,我会得到一个字符串,然后我可以查看它是否与我拥有的页面名称匹配。如果我没有得到 page_name,即什么都没有,我会得到一个 Null,当我测试它时,我会做一些适当的事情......

      如果这更加混乱,我深表歉意!

      【讨论】:

      • 感谢您的回答。我使用 $data['page'] 作为此方法的参数:
      • 公共函数 get_all($limit,$start){ $this->db->limit($limit,$start); $q=$this->db->get('users'); $行=数组(); foreach($q->result() as $row){ $rows[]=$row; } 返回 $rows; }
      猜你喜欢
      • 2014-03-31
      • 2017-12-29
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2012-09-08
      相关资源
      最近更新 更多