2015-07-31 5 views
2

Здравствуйте поэтому у меня есть кусок кода:PHP оператор троичного несколько операторов

if($request['txt_!'] != "") { 
    $randl1_1 = mt_rand(100000, 999999); 
} else { 
    $randl1_1 = ''; 
} 

И когда я преобразовать его в тройном оператора:

$randl1_1 = ($request['txt_1'] != "") ? mt_rand(100000, 999999) : ''; 

Что делать, если я добавлю некоторые в моем случае ? Например,

if($request['txt_!'] != "") { 
    $randl1_1 = mt_rand(100000, 999999); 
    someFunction(); 
} else { 
    $randl1_1 = ''; 
} 

Возможно ли это в тройном операторе?

+0

Вы пробовали? – Rizier123

+0

@ Rizier123 Да, он работает, но просто хочу спросить, есть ли что-то подобное: D – FewFlyBy

ответ

6

Это возможно, но это сделало бы использование тройной менее полезной, так как это загромождает ее (особенно если вы хотите сохранить ее на одной линии). Если бы вы использовали это выражение в качестве RHS, его возвращаемое значение также было бы присвоено $randl1_1.

someFunction() Если что-то вернулся truthy, то ...

$randl1_1 = ($request['txt_1'] != "") ? someFunction() && mt_rand(100000, 999999) : ''; 

Если вы не можете использовать ||. Но, как вы видите, это уродливо. Если someFunction() полагается на $randl1_1, ну, то у вас проблемы хуже. :)

В вашем втором случае я бы использовал более подробный пример, который вы указали. Вы хотите, чтобы ваш код сообщал себе и другим, чьи намерения были четко определены.

Пытаться обуздать все в тройной - это плохая практика.

+0

* Возможно * Можете ли вы дать демо для этого? – Rizier123

+0

Хорошо, спасибо за рекомендацию. – FewFlyBy

+0

Ваш пример, который вы показываете, отличается от последнего кода кода OP. В коде OP функция не должна возвращать что-то, и вы не должны ее конкатенировать или что-то вроде этого с вызовом 'mt_rand()'. – Rizier123

3

Вы не можете поместить несколько операторов в параметры тернарного оператора. Вы можете использовать запятую, чтобы оценить несколько выражений, хотя:

$rand1_1 = ($request['txt_1'] != "") ? (someFunction(), mt_rand(100000, 999999)) : ''; 

Однако оператор запятая возвращает последний операнд. Если вы хотите выполнить что-то после, вычисляя значение, которое вы хотите назначить, оно не будет работать, например.

$rand1_1 = ($request['txt_1'] != "") ? (mt_rand(100000, 999999), someFunction()) : ''; 

Это установит $rand1_1 к значению, возвращаемому someFunction(), не случайной величины. Вы должны были бы сохранить случайное значение переменной:

$rand1_1 = ($request['txt_1'] != "") ? ($temp = mt_rand(100000, 999999), someFunction(), $temp) : ''; 

Все это дополнительный беспорядок делает троичной очень трудно читать, отрицая значение, используя его вместо обычного if заявления.

+0

Спасибо, сэр. Будет делать нормальный, если иначе, то – FewFlyBy

+0

А. Наконец ответ, о котором я думал :) Первое предложение говорит все! – Rizier123

+1

При использовании запятых я получил ошибку синтаксического анализа. –

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