2013-09-04 2 views
0

У меня есть этот кусок кода, который неясен мне, в частности, комплексное использование тройных операторовпонимания вложенных тройных операторов

if (!$byField && is_numeric($v)){ // by ID 
$r=$fromRow? 
$fromRow: 
($v? 
dbRow("select * from pages where id=$v limit 1"): 
array() 
); 
} 

если кто-то может объяснить, как оценить вложенное использование тройных операторов

+0

http://php.net/manual/en/language.operators.precedence.php – zerkms

ответ

2

Рассмотрим следующий код:

<?php 
    $a = true; 
    $b = false; 
    $c = true; 

    echo (
     $a 
     ? 'A is true' 
     : (
      $b 
      ? 'A is false, but B is true' 
      : (
       $c 
       ? 'A is false, B is false, but C is true' 
       : 'A, B and C are all false' 
      ) 
     ) 
    ); 
?> 

Что можно было бы легко переписать в виде так:

<?php 
    if ($a) { 
     echo 'A is true'; 
    } else { 
     if ($b) { 
      echo 'A is false, but B is true'; 
     } else { 
      if ($c) { 
       echo 'A is false, B is false but C is true'; 
      } else { 
       echo 'A, B and C are all false'; 
      } 
     } 
    } 
?> 
+0

ваш ответ правильный и типичный, потому что вы сохранили иерархию вложенных, если еще условие –

1
if (!$byField && is_numeric($v)){ // by ID 
    if ($fromRow) { 
    $r = $fromRow; 
    else if ($v) { 
    $r = dbRow("select * from pages where id=$v limit 1"): 
    } else { 
    $r = array(); 
    } 
} 
3

Использование вложенных троичных операторов в вашем коде добавляет излишнюю сложность. По той же причине он не должен использоваться. Вместо этого используйте обычный блок if-else. Это гораздо более читаемо.

if (condition) { 
    # code... 
} 
else { 
    # code... 
} 

Чтобы ответить на ваш вопрос:

$r = $fromRow ? $fromRow : ($v ? dbRow("..."): array()); 

Данное заявление может быть переписал следующим образом:

if (!$byField && is_numeric($v)) 
{ 
    if ($fromRow) 
    { 
     $r = $fromRow; 
    } 
    elseif ($v) 
    { 
     $r = dbRow("select * from pages where id=$v limit 1"): 
    } 
    else 
    { 
     $r = array(); 
    } 
} 

Как вы можете видеть, это более читаемым.

+0

ваш ответ тоже правильный –

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