2016-03-08 2 views
1

Посмотрите на этот код:Повторные Variable на оператора PHP 7 Null коалесцирующем

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

Я хочу, чтобы проверить, если какой-то вар равно нулю, и если же вар является пустым множеством тот же вар на «значение».

Следовательно, я повторяю ту же переменную после равного оператора, это не кажется правильным.

Так что я чувствую, что нам нужен другой оператор, как ??= похож на +=:

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

Таким образом, если переменная равна нулю это установлено значение «значение» и еще остается тем же самым.

+0

@Epodax кнопку [нулевой оператор COALESCE] (https://wiki.php.net/rfc/isset_ternary) была введена, чтобы писать меньше кода для ситуаций, как это. Заметьте, что '$ var' появляется в вашем примере 3 раза и всего 2 раза в коде, указанном в вопросе. Ваше предложение подталкивает его в неправильном направлении. – axiac

+0

@axiac - Вы узнаете что-то новое каждый день, однако почему бы не предоставить это как ответ/soloution для OP? Похоже, это именно то, что нужно OP? – Epodax

+0

@Epodax оператор пустой коалесценции - это то, что использует OP прямо сейчас. Она ищет способ написать еще более короткий код, чтобы записать длинное выражение из левой части задания ('$ var' в вашем примере) только один раз. Оператор, которого она предлагает, пока не существует в «PHP». – axiac

ответ

0

Просто создайте функцию полезности для этой цели:

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

Это присвоит значение для $variable тогда и только тогда, когда его значение null или не установлен.

Функция использует 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'); 
2

Я реализовал этот оператор и сделал запрос на извлечение для PHP7. В настоящее время он находится на стадии RFC, и если он будет принят, он будет объединен с PHP версии 7.x.

https://wiki.php.net/rfc/null_coalesce_equal_operator

Смежные вопросы