簡體   English   中英

有人知道這行代碼的意思嗎?

[英]Does anyone know what this line of code means?

我有這行代碼:

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

我對三元運算很熟悉,但是我不確定這行代碼的作用。

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

好吧,如果$this->uri->segment(3)計算結果為非假,則$data['page']將被設置為其內容,否則將其設置為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);
}
$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。

/ controller / method / parameter細分1 =控制器細分2 =方法細分3 = parameter,之后我們可以有任意數量的參數,因此您可以擁有更多的細分。

因此,如果uri包含第3段(即/ controller / method / parameter),則將返回“ 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,並且當我對此進行測試時,我將做一些適當的事情...

如果您感到更加困惑,我深表歉意!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM