Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Принцип вопроса и последующего двоеточия
 
 автор: kostya   (18.01.2010 в 16:04)   письмо автору
 
 

Здравствуйте!
Объясните пожалуйста принцип действия данного кода:
<img src="<? echo ((!empty($main_image)) ? '' $main_image '' $layout[''] . '' 'themes/' $setts['default_theme'] . '/img/system/noimg.gif');?>" border="0" width="200" alt="<?=$item_details[$counter]['name'];?>">


На сколько я понимаю, если переменная не пуста ((!empty($main_image)), то выполняется следущий код: '' . $main_image . '' . $layout[''] . ''
а в противном случае то, что стоит после двоеточия:
'themes/' . $setts['default_theme'] . '/img/system/noimg.gif');?>" border="0" width="200" alt="<?=$item_details[$counter]['name'];?>">

Верно ли я понимаю?

  Ответить  
 
 автор: sim5   (18.01.2010 в 16:14)   письмо автору
 
   для: kostya   (18.01.2010 в 16:04)
 

Верно. Это и есть "принцип вопроса и последующего двоеточия" :)
Это называется условной операцией.

  Ответить  
 
 автор: Николай2357   (18.01.2010 в 17:17)   письмо автору
 
   для: sim5   (18.01.2010 в 16:14)
 

И еще "тернарным оператором" Это я не Вам, это так, дополнение длясправки.)

  Ответить  
 
 автор: heed   (18.01.2010 в 16:16)   письмо автору
 
   для: kostya   (18.01.2010 в 16:04)
 

вместо этого
((!empty($main_image)) ? '' . $main_image . '' . $layout[''] . '' : 'themes/' . $setts['default_theme'] . '/img/system/noimg.gif')

подставляется
'' . $main_image . '' . $layout[''] . ''
, если переменная $main_image не была пустой
или
'themes/' . $setts['default_theme'] . '/img/system/noimg.gif'
в противном случае

что-то в первом случае много лишних '' . '' . ''
// особенно $layout[''] настораживает

  Ответить  
 
 автор: Trianon   (18.01.2010 в 19:15)   письмо автору
 
   для: kostya   (18.01.2010 в 16:04)
 

Если выражение до вопроса определяется как истинное, то вычисляется выражение между вопросом и двоеточием, в противном случае вычисляется выражение после двоеточия. Результатом станет значение вычисленного выражения.

  Ответить  
 
 автор: Николай2357   (18.01.2010 в 21:33)   письмо автору
 
   для: Trianon   (18.01.2010 в 19:15)
 

А я всегда думал, что выражение не просто вычисляется, но и возвращается сразу...
Наверное это имелось ввиду под результатом, но Вы сами всегда говорили о точности.

  Ответить  
 
 автор: Trianon   (18.01.2010 в 23:32)   письмо автору
 
   для: Николай2357   (18.01.2010 в 21:33)
 

то есть?
Возвращается значение.
Как можно вернуть значение, не вычислив выражение?

  Ответить  
 
 автор: Николай2357   (18.01.2010 в 23:49)   письмо автору
 
   для: Trianon   (18.01.2010 в 23:32)
 

Тое есть значение именно возвращается. В отличии от if... tlse. Где после вычисления условия разрешается действие. Я не так, как Вы силен в терминологии, но суть проста. Это:
<?
if($a == true

не тождественно этому
<?
($a == true) ?

потому что первое при удачном стечении обстоятельств позволяет вычислять последующие выражения, а второе сразу возвращать их значения. То есть то, что находится в тернарном операторе слева и справа от двоеточия, будет не просто вычислено, но и сразу возвращен результат. Туда же, на места выражений. А в первом случае ( с if... else) нет.
Поправьте, если не так.

  Ответить  
 
 автор: Trianon   (19.01.2010 в 00:25)   письмо автору
 
   для: Николай2357   (18.01.2010 в 23:49)
 

не понял.

Есть операторы и есть выражения. Это разные вещи.
Одним из видов оператора является оператор вычисления выражения.
Значение такого выражения при этом теряется. В учет идут лишь побочные эффекты.

  Ответить  
 
 автор: Николай2357   (19.01.2010 в 00:34)   письмо автору
 
   для: Trianon   (19.01.2010 в 00:25)
 

А я понял. Еще одним белым пятном меньше. Спасибо.

  Ответить  
 
 автор: kostya   (23.01.2010 в 17:23)   письмо автору
 
   для: Николай2357   (19.01.2010 в 00:34)
 

Мужики, спасибо всем за ответы, я разобрался :)

  Ответить  
 
 автор: @ndry   (23.01.2010 в 18:11)   письмо автору
 
   для: kostya   (18.01.2010 в 16:04)
 

Яркий пример как код писать не нужно =).

Я заметил, что вам уже всё обьяснили, но всё-же:
И последнюю, третью группу составляет тернарный оператор ?:. Он используется для условного выбора между двумя операторами, в зависимости от результата вычисления третьего оператора. Говоря другими словами, он позволяет определить две альтернативные ветви дальнейшего выполнения. Тернарный оператор рекомендуется заключать в круглые скобки.
http://docs.php.net/manual/ru/language.operators.php
http://www.fnors.ru/view_post.php?id=281

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования