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

Форум PHP

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

 

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

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

тема: Операторы "И" "ИЛИ"
 
 автор: demonow   (08.02.2012 в 01:13)   письмо автору
 
 

Народ, наткнулся на интересную трактовку операторов or и and

$b=0;
$c=5;
$a=$b or $c*=5;
/////присвоит 0 и умножит $c
$b=0;
$c=5;
$a=$b || $c*=5;
///// умножит $c присвоит логическое значение
$a=0;
$b=4;
$a and $b*=4;
echo $b;
//// останется 4


здесь данные операторы выполняют другую роль(если фолс выполнить, что после "ор").А можно ссылочек ну или вкратце что это такое?
И это единичный способ использование данной специфики оператора(например or die()) или это независимая часть, которую можно применять куда-угодно?

  Ответить  
 
 автор: cheops   (08.02.2012 в 13:32)   письмо автору
 
   для: demonow   (08.02.2012 в 01:13)
 

Это использование "приоритета операторов", все операторы имеют разные приоритеты, как и в математике, сначала умножение и деление, затем сложение и вычитание. Так и тут сначала выполняются одни операторы, потом другие. Кроме того, при реализации логических вычислений используется ленивый принцип. Т.е. если у вас
выражение1 && выражение2
и выражение1=false, вычислять/выполнять выражение2 не имеет смысла, так как все логическое выражение уже равно false. Аналогично с || или or, только уже в обратную сторону, если выражение1=true, то чему бы там не равнялось выражение2, все логическое выражение равно true, вычислять выражение2 нет никакого смысла
mysql_query($query) or die("Ошибка выполнения запроса");
если mysql_query($query) вернуло true, нет смысла вычислять die() и программа его не вычисляет. Однако, если mysql_query($query) вернет false, то нужно поглядеть чему равен второй аргумент... так как если он будет равен true, все выражение станет равным true, если false - все выражение будет равным false. А там стоит die(), который вообще прекращает работу программы. В PHP этот синтаксис пришел из Perl, а в Perl из C, а в C он зародился для ускорения работы программы. Вообще такой синтаксис сейчас не поощряется - слишком долго нужно думать над выражением и слишком легко совершить ошибку. Так писали лет 20-40 назад, когда нужно было экономить процессор и сводить количество операций к минимуму, сейчас нужно экономить время работы программиста - поэтому код лучше оформлять так, чтобы ему было все понятно и он бы не затрачивал усилия и время на его разбор.

  Ответить  
 
 автор: demonow   (08.02.2012 в 22:04)   письмо автору
 
   для: cheops   (08.02.2012 в 13:32)
 

спасибо

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

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