2013-05-09 1 views
0

ИЛИ Существует ли в PHP обобщающим для:Функции и оператор

function a() {...} 
function b() {...} 

$c = a(); 
$c = ($c) ? $c : b(); 

В JavaScript вы можете просто сделать:

$c = a() || b(); 

но в PHP, если вы сделаете это, $c будет boolean (что нормально, но я хочу знать, существует ли еще одна стенография, которая делает то, что я хочу).

ОБНОВЛЕНИЕ
Благодарим вас, ребята, за ответы.

Самый короткий путь, чтобы сделать это, кажется:

$c = a() ?: b(); 

Я лично тоже нравится:

$c = a() or $c = b(); 

для хорошей читаемости.

+1

'$ c = a()?: B();' –

+0

@Jack: Кажется, это работает: http://phpassist.com/6fcca#2 –

ответ

2

Это не возможно сделать это как в Javascript, но вы можете использовать сокращенную версию трехкомпонентной конструкции:

$c = a() ?: b(); 

Другой способ заключается в используйте меньший приоритет or.Это не так красиво, но это на самом деле происходит ближе к тому, как вы можете сделать это в Javascript:

$c = a() or $c = b(); 

Другой способ представления выше, так что легче понять, это обернуть его в скобках:

($c = a()) or ($c = b()); 

оператор присваивания =, имеет больший приоритет, чем оператор «или» (не путать его с оператором ||, хотя), что означает, что часть после or не будет выполнена, если первая часть Равняется до true. Это, по существу, такой же, как это:

if ($c = a()) { 
    // Do nothing 
} elseif ($c = b()) { 
    // Do nothing 
} 

Оба выражения являются задания, которые оценивают либо true или false. Если первое выражение равно true, то $c будет a(). В противном случае второе выражение будет проверено, и потому что это последнее выражение, и потому что после этого ничего не делается, $c будет просто равен b().

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

+0

Да, это не очень важная проблема. Тем не менее, мне нравится изучать новые вещи и совершенствовать свои навыки. Спасибо за ваш ответ. –

3

Это может работать:

$c = ($c) ? : b(); 
+1

Это для> PHP 5.3? –

+0

@TamasPap - да; это 5,3 и выше. (скажите, пожалуйста, что вы не используете версию старше этого) – Spudley

+0

@TamasPap Я так думаю. – vikingmaster

1

Мне нравится это так, но вопрос о предпочтении

if(!$c=a()){ 
    $c=b(); 
} 

как в

if(!$User=$db->getUserFromID($user_id)){ 
    $User=$db->getUserFromUsername($username); 
} 
1

Существует возможность использовать черную магию как это. Я бы предпочел написать его в более длинной форме.

function a() { 
    return false; 
} 
function b() { 
    return true; 
} 

($c = a()) || ($c = b()); 

echo $c; 
1

Вы можете сделать это:

$c = a() OR $c = b(); 
Смежные вопросы