Написать письмо авторам  
 

УЧЕБНИК PHP


справочник функций <Оnline>

Об учебнике

Обновление

Оглавление

  1. Основы PHP
  2. Операторы языка PHP
  3. Строковые функции
  4. Массивы
  5. Функции
  6. Работа с файлами
  7. Регулярные выражения
  8. Сессии и cookies в PHP
  9. Работа с FTP
  10. Проверка данных
  11. Гостевая книга
  12. PHP и MySQL

Продолжение следует




Основы PHP

Предыдущая Следующая

Операторы

Арифметические операторы

+ Сложение
- Вычитание
* Умножение
/ Деление
% Вычисление остатка по модулю (к примеру: 5 % 2=1)

Поразрядные операторы

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

& Поразрядная конъюнкция (AND)
| Поразрядная дизъюнкция (OR)
^ Поразрядное исключающее ИЛИ (XOR)
~ Поразрядное отрицание (NOT)
<< Сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда
>> Сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда

Пример:

<?
   echo(4<<2); // равно 16 
   echo"<br>"; 
   echo(5>>1); // равно 2
   echo"<br>"; 
   echo(6&5); // равно 4
   echo"<br>"; 
   echo(6|5); // равно 7
   echo"<br>"; 
   echo(6^5); // равно 3
>?

Разберем первый пример. Двоичный код для 4 равен 100, при сдвиге влево на 2 разряда код 100 становится равным 10000, что соответствует десятичному значению 16. Остальные примеры могут быть разобраны аналогично. Обратим внимание на то, что сдвиг влево на n позиций эквивалентен умножению на 2n, а сдвиг вправо уменьшает соответствующее значение в 2n раз с отбрасыванием дробной части результата (поэтому 5>>1 равно 2). Основное назначение этих операторов – быстрые вычисления. Так как их поддержка осуществляется на аппаратном уровне (процессор), алгоритмы, выполненные с использованием данных операторов получаются очень производительными.

Логические операторы

or или || ИЛИ
Xor исключающее ИЛИ
and или && И
! НЕ

Операторы этой группы, в отличие от поразрядных, работают с логическими переменными (boolean) и интенсивно используются в управляющих конструкциях: циклы и условия. Логические переменные, или более правильно, переменные типа Boolean имеют лишь два значения: true(истина) и false(ложь). В выражениях true и false можно заменить на 1(любое отличное от 0 число) и 0, соответственно. Возможность замены true и false на 1 и 0 – это «наследство» языка С, в котором не было специальных переменных true и false.

Логически операторы для переменных типа Boolean выполняют роль операторов сложения, вычитания для обычных переменных. Рассмотрим несколько примеров, если их смысл Вам не очень понятен – не расстраивайтесь, просто вернитесь сюда, прочитав главу 2. Оператор if(cond) проверяет условие cond, если его значение true – выполняется код в фигурных скобках, следующий за if, если false – код после оператора else. Если cond равен false – всё наоборот.

<php
   $flag = true; // Истина
   if($flag)
   {
      echo "<p>Переменная flag имеет значение true</p>";
   } else {
      echo "<p>Переменная flag имеет значение false</p>";
   }
?>

Результаты работы скрипта выглядят следующим образом:

Переменная flag имеет значение true

Если теперь заменить строчку

    $flag = true; // Истина
    на
    $flag = false; // Ложь

Результат, выдаваемый тэгом измениться:

Переменная flag имеет значение false

Т.е. мы зашли в блок else, так как в операторе if условие ложно.

Когда условие одно, как видите, всё просто. Когда условий больше - в дело вступают логические операторы:

<php
   $flag1 = true; // Истина
   $flag2 = true; // Истина
   if($flag1 && $flag2) // И $flag1 И $flag2 истины
   {
      echo "<p>Условие: true (Оба флага истины)</p>";
        // Да
   } else {
      echo "<p>Условие: false (Один из флагов ложен)</p>"; 
        // Нет, один или оба ложны
   }
?>

Этот скрипт выведет: Условие: true (Оба флага истины). Если хотя бы один из операторов окажется равным false (или оба сразу) – будет выведено: Условие: false (Один из флагов ложен).

Обязательно попробуйте поиграть с условиями: если вы не будете разбираться в условных операторах – Вы никогда не будете хорошим программистом ни на одном языке программирования. Если Вы считаете, что Вам не нужны условные операторы – Вам не нужен язык программирования.

Заменим && (И) на || (ИЛИ)

<php
   $flag1 = true; // Истина
   $flag2 = false; // Истина
   if($flag1 || $flag2) 
      // Хоть кто-то из двух флагов($flag1 $flag2) истинен
   {
      echo "<p>Условие: true (Один из флагов истин)</p>"; 
      // Да
   } else {
      echo "<p>Условие: false (Оба флага ложны)</p>"; 
      // Нет оба имеют значение false
   }
?>

Опять получаем: Условие: true.

Для И и ИЛИ, как видим, возможны два варианта операторов, причем эти операторы с разными приоритетами. Приоритетность выполнения логических операторов: or > xor > and > || > && > ! Иногда в условиях удобно использовать скобки для явного задания приоретета:

<php
   $flag1 = true;
   $flag2 = true;
   $flag3 = false;
   if( $flag1 && $flag2 || $flag3)
   {
      echo "<p>Условие истинно<p>";
   }
   else
   {
      echo "<p>Условие ложно<p>";
   }
?>

Результатом будет вывод фразы «Условие истинно», так как согласно приоритету исполнения сначала выполняется оператор &&, так как оба флага равны true – возвращается true, затем это выражение сравнивается с $flag3 (true || $flag3) – что возращает тоже true, так как одно из сравниваемых равно true.

Если же мы запишем

<php
   $flag1 = true;
   $flag2 = true;
   $flag3 = false;
   if($flag1 && ($flag2 || $flag3))
   {
      echo "<p>Условие истинно<p>";
   }
   else
   {
      echo "<p>Условие ложно<p>";
   }
?>

результатом будет «Условие ложно».

Вообще программисты не любят запоминать порядок приоритетов, поэтому для того чтобы Ваш код легко читался (в том числе и Вами) лучше всегда использовать скобки. Т.е. в первом скрипте лучше записать if(($flag1 && $flag2) || $flag3) – тогда сразу становиться понятно, что имеется ввиду.

Иногда нужно проверить условие безальтернативно, например, на ложность или истинность. Допустим, функция (func()) возвращает истину или ложь и в зависимости от этого нужно вывести на страничку те или иные теги. Например, функция mysql_query($query) – возвращает true если запрос к базе данных mySQL, размещённый в строке $query успешно выполнился и false – в противном случае.

Если Вам нужно среагировать только на удачное обращение, Вы можете записать:

<php
   if(mysql_query($query))
   {
      echo "<p>Данные успешно занесены в базу данных.<p>";
   }
?>

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

<php
   if(mysql_query($query))
   {}
   else
   {
      echo"<p>Данные не были занесены в базу данных.<p>";
   }
?>

Но это не элегантный, запутывающий способ – здесь самое время воспользоваться оператором отрицания: !, применение которого к переменной меняет её значение с true на false, а false на true:

<php
   if(!mysql_query($query))
   {
      echo"<p>Данные не были занесены в базу данных.<p>";
   }
?>
Предыдущая Следующая

 
  Наверх