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

Форум PHP

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

 

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

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

тема: Непонятное выражение для оператора сравнения
 
 автор: Владимир55   (30.01.2012 в 11:32)   письмо автору
 
 

В типовом модуле обнаружил странное выражение для оператора сравнения. В сокращенном виде это выглядит так:

<?php

    $IfModifiedSince 
false;
    if (isset(
$abc))  $IfModifiedSince 110;
    if (isset(
$abcd)) $IfModifiedSince 120;
    if (
$IfModifiedSince && $IfModifiedSince >= $Las) die ();


В последней строке имеет место конъюнкция двух переменных с одинаковыми именами.

Как такое возможно?

  Ответить  
 
 автор: cheops   (30.01.2012 в 11:45)   письмо автору
 
   для: Владимир55   (30.01.2012 в 11:32)
 

Дело в том, что у оператора && приоритет меньше, чем у >=, поэтому читать выражение следует так
<?php
...
if (
$IfModifiedSince && ($IfModifiedSince >= $Las)) die ();
...
?>

  Ответить  
 
 автор: Владимир55   (30.01.2012 в 12:00)   письмо автору
 
   для: cheops   (30.01.2012 в 11:45)
 

То есть, условие такое: "Если $IfModifiedSince существует и при этом больше-равно $Las).

Но если переменная $IfModifiedSince больше-равна $Las, то она существует. А если так, то не является ли логическим эквивалентом запись

<?php 
... 
if (
$IfModifiedSince >= $Las) die (); 
... 
?>


Или в РНР есть ещё какая-то тонкость?

  Ответить  
 
 автор: cheops   (30.01.2012 в 12:02)   письмо автору
 
   для: Владимир55   (30.01.2012 в 12:00)
 

.

  Ответить  
 
 автор: cheops   (30.01.2012 в 12:06)   письмо автору
 
   для: Владимир55   (30.01.2012 в 12:00)
 

Тут я так понимаю, проблема в $IfModifiedSince - нужно проверить, чтобы оно не равнялось 0, если $Las <=0, это вполне возможно, тогда такого условия будет не достаточно, так как $IfModifiedSince >= $Las вернет 1, не смотря на то, что обе переменные равны 0.
<?php
  $IfModifiedSince 
0;
  
$Las 0;
  echo (
$IfModifiedSince >= $Las);
  echo 
"<br />";
  echo 
$IfModifiedSince;
?>

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

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