2016-03-08 49 views
1

看看這段代碼:重複可變

$this->request->data['comments']['user_id'] = 
    $this->request->data['comments']['user_id'] ?? ‘value’; 

我要檢查一些變種是空,如果同一變種是空集相同的變種,以「價值」。

因此,我在重複相同的運算符後的相同變量,這感覺不對。

所以我覺得,我們需要另算像??=類似+=

$this->request->data['comments']['user_id’] ??= ‘value’. 

因此,如果VAR爲空將它設置爲「價值」和其他人保持不變。

+0

@Epodax的[空聚結操作](https://wiki.php.net/rfc/isset_ternary)引入到寫更少的代碼對於這樣的情況。注意'$ var'在你的例子中出現了3次,而在問題中發佈的代碼中只有2次。你的建議將它推向了錯誤的方向。 – axiac

+0

@axiac - 然而,你每天都會學到新的東西,爲什麼不把它作爲OP的答案/解答?這看起來正是OP所需要的? – Epodax

+0

@Epodax空合併運算符是OP現在使用的。她尋找一種方法來編寫更短的代碼,從賦值左側(在示例中爲'$ var')中只寫一次長表達式。她提出的操作符並不存在於'PHP'中。 – axiac

回答

0

只需創建一個效用函數用於此目的:

function assignIfNotSet(&$variable, $value) { 
    if (!isset($variable)) { 
     $variable = $value; 
    } 
} 

它將當且僅當它的值是null或者沒有設置值分配給$variable

該功能利用passing variables by references — see docs

用法:

$x = "original value"; 
assignIfNotSet($x, "other value"); 
var_dump($x); // "original value" 

$y = null; 
assignIfNotSet($y, "other value"); 
var_dump($y); // "other value" 

// assuming $z wasn't previously defined 
assignIfNotSet($z, "other value"); 
var_dump($z); // "other value" 

它也適用於數組項和對象屬性。在你的情況:

assignIfNotSet($this->request->data['comments']['user_id'], 'value');