有谁知道这行代码意味着什么?

时间:2016-10-20 11:37:51

标签: php codeigniter

我有这行代码:

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

我熟悉三元操作,但我不太清楚这行代码是做什么的。

4 个答案:

答案 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,当我测试它时,我会做一些合适的事情......

如果这更令人困惑,我道歉!