我有这行代码:
$data['page'] =($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
我熟悉三元操作,但我不太清楚这行代码是做什么的。
答案 0 :(得分:1)
if ($this->uri->segment(3)){
$data['page'] = $this->uri->segment(3);
} else {
$data['page'] = 0;
}
答案 1 :(得分:0)
好吧,如果$this->uri->segment(3)
评估的内容不是假的,那么$data['page']
将设置为其内容,其他为0。
你知道,如果你真的知道三元操作,就像你说的那样。
这是为变量建立默认值的一种非常常见的方法。
答案 2 :(得分:0)
$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);
}
答案 3 :(得分:0)
$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-&gt; uri-&gt; segment(3)将返回uri的第3段的值(如果存在),否则它将返回NULL。
/控制器/方法/参数 段1 =控制器 段2 =方法 段3 =参数,之后我们可以有任意数量的参数,因此你可以有更多的段..
因此,如果uri包含段3(即/ controller / method /参数),则&#34;参数&#34;值将返回,因为它是第3段,在上面的测试中,它将评估为Not NULL或True,$ data [&#39; page&#39;]将被设置为之后定义的值?在这种情况下,它本身就是$ this-&gt; uri-&gt; segment(3)的值。
如果uri不包含段3(即/ controller / method),那么$ this-&gt; uri-&gt; segment(3)将计算为NULL或False,并且:将值分配给$数据[&#39; page&#39;],在本例中为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的第3段的页面名称,因此将默认值或失败值从Null更改为0的所有麻烦似乎都不合适。
你想要对此进行测试...即我得到一个页面名称还是不要我。 如果我这样做,我会得到一个字符串,那么我可以看到它是否与我的页面名称相匹配。如果我没有获得page_name,即什么都没有,我会得到一个Null,当我测试它时,我会做一些合适的事情......
如果这更令人困惑,我道歉!