Php and

Условный оператор if в PHP

Главное в действие данное оператора — это условие. if в переводе с английского значит если. Условие принимается в качестве аргумента (то что в скобках). В качестве условия может выступать логическое выражение или логическая переменная. Если проще, то смысл выражения будет такой:

if (условие){  условие выполнено, делаем так  }  else  {  условие не выполнено, делаем иначе  }

Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.

<?php   $a = 5;  $b = 25;    // Теперь внимание! Условие: Если $b больше $a  // Знаки > и < , как и в математике, обозначают больше и меньше  if($b > $a)  {      // если условие выполнено, то выполняем это действие      echo "$b больше $a";  }  else   {      // если не выполнено, то это         echo "$a больше или равно $b";  }  ?> 

Демонстрация Скачать исходники

В итоге скрипт выведет 25 больше 5. Пример довольно прост. Надеюсь всё понятно. Теперь предлагаю рассмотреть ситуацию сложнее, где нужно соблюсти несколько условий. Каждое новое условие будет содержать после основного условия if() — вспомогательное, которое записывается как else if(). В конце как обычно будет else.

Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.

<?php   $test = 82; // допустим школьник написал тест на 82 балла    // первое условие напишем для пятёрки  if($test > 90)  {      // если условие соблюдено, то выполняем это действие.      echo "Оценка 5";  }  // Знак && обозначает "и, объединение", что условие соблюдено если и то, и то верно  // то есть балл меньше 91 и больше 80, тогда 4. Иначе условия считываются дальше  else if ($test < 91 && $test > 80)   {      echo "Оценка 4";  }  else if ($test < 81 && $test > 70)   {      echo "Оценка 3";  }  else  {      echo "Надо бы ещё раз написать тест...";  }  ?>

Демонстрация Скачать исходники

Наш школьник, который успевает и отдохнуть, и написать нормально тест получает оценку 4! А принцип работы надеюсь понятен.

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

$age = 19; // переменная с возрастом    if ($age > 17){    echo "Всё! Мне можно делать всё что угодно! Мне уже $age!";  }

Вполне себе милый пример короткой записи условной операции. else писать не обязательно.

Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?

Операторы сравнения в PHP

Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.

Пример        Название            Результат  $a == $b    Равно             True, если $a равно $b  $a === $b   Идентично         True, если $a равно $b и обе переменных принадлежат одному типу  $a != $b    Не равно          True, если $a не равно $b  $a === $b   Не идентично      True, если $a не равно $b и оба их типа не совпадают  $a > $b     Больше чем        True, если $a больше, чем $b  $a < $b     Меньше чем        True, если $a меньше, чем $b  $a >= $b    Больше или равно  True, если $a больше или равно $b  $a <= $b    Меньше или равно  True, если $a меньше или равно $b

Теперь рассмотрим операторы на примерах:

$a = 5;    // вопреки привычке = значит присваивание значение переменной, а == как равно  if ($a == 5){    echo "$a равно 5"; // выведет "5 равно 5"  } else {    echo "$a не равно 5";  }    if ($a != 6){    echo "$a не равно 6"; // выведет "5 не равно 6". Нужно в случае отрицания  } else {    echo "$a каким-то образом равно 6";  }    // с больше и меньше думаю всё понятно. Поэтому пример сложнее  if ($a <= 6){    echo "$a меньше или равно 6"; // выведет "5 меньше или равно 6"  } else {    echo "$a больше 6";  }

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

Бывают случаи, когда нужно сравнить не одну переменную, а сразу две и более в одном условии. Для этого существуют логические операторы.

Пример       Название          Результат  $a and $b    Логическое 'и'     TRUE если и $a, и $b TRUE.  $a or $b     Логическое 'или'   TRUE если или $a, или $b TRUE.  $a xor $b    Исключающее 'или'  TRUE если $a, или $b TRUE, но не оба.  ! $a         Отрицание          TRUE если $a не TRUE.  $a && $b     Логическое 'и'     TRUE если и $a, и $b TRUE.  $a || $b     Логическое 'или'   TRUE если или $a, или $b TRUE.

Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.

Переходим к примерам

$a = 5;  $b = 6;  $c = 7;    // условие: Если 5 не равно 6 (ВЕРНО)  И  6 не равно 7 (ВЕРНО)  if ($a < 6 && $b != $c){    echo "Действительно так!"; // выведет "Действительно так!" т.к. ОБА условия ВЕРНЫ  } else {    echo "Одно из условий не верно";  }    // условие: Если 6 не равно 6 (НЕВЕРНО)  ИЛИ  6 не равно 7 (ВЕРНО)  if ($b != 6 || $b != $c){    echo "Всё так!"; // выведет "Всё так!", т.к. хотя бы ОДНО из условий ВЕРНО  } else {    echo "Оба условия не верны";  }

Тернарный оператор

К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.

Суть кода: (условие) ? значение a если true : значение a если false

Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.

<?php  // Пример использования тернарного оператора  $settings = (empty($_POST['settings'])) ? 'По умолчанию' : $_POST['settings'];    // Приведенный выше код аналогичен следующему блоку с использованием if/else  if (empty($_POST['settings'])) {      $settings = 'По умолчанию'; // Если ничего не передано, то оставляем "По умолчанию"  } else {      $settings = $_POST['settings']; // Если передано, то $settings присваивается переданное значение.  }  ?>

Прочитайте комментарии к коду и всё должно быть понятно.

Спасибо за внимание!

tradebenefit.ru

Логическое ИЛИ (OR и ||)

Оператор логическое ИЛИ обозначается как OR или ||. Он выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращает true. Если оба операнда имеют ложные значения, он возвращает false. У вас вероятно возник вопрос, зачем же сделали два варианта одного оператора? Смысл двух разных вариантов оператора «логическое ИЛИ» в том, что они работают с различными приоритетами.

Сначала разберем как работает оператор ||. И так, если один или оба его операнда имеют истинное значение, он возвращает true. Если оба операнда возвращают ложные значения, он вернет false.

Оператор OR работает также как и оператор || за одним исключением, если оператор OR используется с присваиванием, то сначала он вычислит и вернет значение левого операнда, в остальном он работает точно также как и оператор ||, т.е. если один или оба его операнда имеют истинное значение, он возвращает true. Если оба операнда возвращают ложные значения, он вернёт false.

Чтобы стало понятнее, как они работают, приведем следующий пример:

  <?php     // Оператор "||" имеет больший приоритет, чем "or"     // Результат выражения (false || true) будет присвоен переменной $var1   // Действие приоритета: $var1 = (false || true)   $var1 = false || true;     echo $var1; // => 1     // Сначала переменной присваивается значение false, а затем вычисляется второй операнд   // Действие приоритета: ($var2 = false) or true   $var2 = false or true;      echo $var2; // false не выводится     // ($var3 = 0) or 3   $var3 = 0 or 3;      echo "<br>$var3"; // => 0    ?>  

Любые операторы сравнения и логические можно комбинировать в более сложные конструкции:

  <?php     $a = (6 == 6) || (4 <= 9);     // или так   echo ('c' != 'd') or ('A' === 'A');    ?>  

Стоит упомянуть еще об одном важном моменте, касательно обоих операторов OR и ||. Оператор «логическое ИЛИ» начинает свои вычисления со своего левого операнда, если он возвращает true, то правый операнд вычисляться не будет. Это позволяет экономить время исполнения, но нужно внимательно следить за тем, чтобы код, от которого может зависеть корректная работа программы, не был помещен в правый операнд.

Логическое И (AND и &&)

Оператор логическое И обозначается как AND или &&. Он выполняет операцию «логическое И» над двумя операндами. Он возвращает true тогда и только тогда, когда оба операнда имеют значение true. Если один или оба операнда возвращают значение false, оператор возвращает false. Смысл двух разных вариантов записи оператора «логическое И» такой же как и у двух предыдущих операторов, а именно в том, что они работают с различными приоритетами.

Сначала разберем как работает оператор &&. И так, если оба его операнда имеют истинное значение, он возвращает true. Если хотя бы один или оба его операнда возвращают значение false, он тоже вернет false.

Оператор AND работает также как и оператор && за одним исключением, если оператор AND используется с присваиванием, то сначала он вычислит и вернёт значение левого операнда, в остальном он работает точно также как и оператор &&. Если хотя бы один из его операндов возвращает значение false, он тоже вернет false, также если оба операнда возвращают ложные значения, он возвращает false.

Для понимания рассмотрим теперь, как это работает на практике:

  <?php     // Оператор "&&" имеет больший приоритет, чем "and"     // Результат выражения (true && false) будет присвоен переменной $bar1   // Действие приоритета: $bar1 = (true && false)   $bar1 = true && false;       // Сначала переменной присваивается значение true, а затем вычисляется второй операнд   // Действие приоритета: ($bar2 = true) and false   $bar2 = true and false;      var_dump($bar1, $bar2);     // ($bar3 = 9) and 3   $bar3 = 9 and 3;      echo "<br>$bar3"; // => 9    ?>  

Исключающее ИЛИ (XOR)

Оператор исключающее ИЛИ обозначается как XOR. Он возвращает значение true, если один и только один из операндов имеет значение true. Если оба операнда имеют значение true, оператор вернет значение false.

Так как приоритет оператора XOR такой же как и у операторов AND и OR (ниже чем у оператора присваивания), и он используется в выражении с присваиванием, то сначала он вычисляет и возвращает значение левого операнда.

  <?php      // ($a1 = 19) xor 5 > 6    $a1 = 19 xor 5 > 6; 		      var_dump($a1); // => 19   var_dump(true xor true); // false   var_dump((2 < 3) xor (5 != 5)); // true    ?>  

Логическое НЕ (!)

Оператор логическое НЕ, его также называют отрицание обозначается знаком !. Он является унарным оператором, помещаемым перед одиночным операндом. Оператор «логическое НЕ» используется для инверсии логического значения своего операнда и всегда возвращает true или false.

Если потребуется инвертировать значение выражения, например a && b, необходимо будет использовать круглые скобки: !(a && b). Также с помощью оператора ! можно преобразовать любое значение x в его логический эквивалент, дважды применив оператор: !!x.

  <?php      $a1 = 10;      var_dump((11 == 11)); // true      // оператора ! инвертирует значение   var_dump(!(11 == 11)); // false      // преобразует в логическое значение   var_dump(!!$a1); // true    ?>  

puzzleweb.ru

Do not echo out HTML!

If you plan on taking the “path to recovery”, then this is the first rule that you should take on board. Echo’ing out HTML is horrible and it prevents non-programmers from being able to work with your design! It also prevents your IDE from being able to highlight HTML elements, attributes, ID names and class names!

This means that instead of doing this:

… you should be doing this:

To sum up the difference:

  • It’s cleaner looking.
  • You can properly indent your HTML.
  • IDEs will be able to highlight the HTML.
  • It is more designer-friendly, as the distinction between PHP and HTML is much clearer.

Oh, and here’s an example of a loop:

Do not mix your logic with your presentation!

There are four terms that you need to be aware of:

  • Logic: This refers to the business logic of your application. Examples include database connections, functions, SQL queries, redirects, session handling and other pieces of logic that control the flow of your application.
  • Presentation: This refers to the appearance / client-side of your application. We’re talking about HTML, CSS and in some cases, JavaScript.
  • Presentation Logic: This is the type of logic that determines the appearance of a certain piece of data. For example, if you are outputting a list of registered users, you might want to highlight disabled accounts in red. This type of logic does not control the flow of your application and it plays no part in any of the business logic! It’s only purpose is to control the layout and appearance of your application!
  • Separation of concerns: Simply put, “Separation of concerns” is a design principle that splits an application up into its relevant “categories (concerns).” Example: Code that handles database connections and SQL queries will be kept separate from the part of the application that handles requests and redirects. In this particular case, we’ll keep it simple by saying that we’re talking about the act of keeping our logic separated from our presentation!

Why?

Why should you separate them?

  1. Generally speaking, file sizes become smaller. Nobody wants to open 4000 lines of logic mixed with HTML.
  2. You don’t have to worry too much about designers damaging the internal workings of your application. They can add design features without having to look at the business logic.
  3. It is much cleaner and easier on the eyes.
  4. Bugs are easier to hunt down.
  5. Your business logic will become easier to modify (adding new features, etc).
  6. Re-designs are much less of a hassle.
  7. It is easier to find certain parts of the application if know where everything is.

An example of the “separation of concerns” principle that you might already be using?

HTML and external CSS stylesheets!

In this particular scenario, HTML defines the structure, whereas CSS defines the appearance of said structure. Whenever you need to change a colour or add a border, you can open the CSS file and make your changes. i.e. You don’t need to edit the HTML at all. It’s a completely separate matter!

MVC

MVC (Model–View–Controller) frameworks are popular because they help to enforce the separations of concerns principle (they also come with a lot of useful libraries and helper classes). Generally speaking, an MVC framework will split your application up into three separate parts:

  • Model: The Model represents the data. Examples: A MySQL table or an XML file.
  • View: The View displays data (presentation). In most cases, view files will consist of HTML and some basic presentation logic.
  • Controller: The Controller passes data to the view. It receives form data from the view and it controls the flow of your application (redirects, etc).

If you are interested in using a PHP MVC framework, then you should check out some of the following:

  • Laravel – Extremely popular.
  • Symfony – Another extremely popular PHP MVC framework.
  • Yii.
  • CakePHP.

Template Engines

Another alternative is to use a template engine such as Twig, which will allow you to separate your logic from your appearance. In a lot of cases, these templating engines are actually used inside some of the MVC frameworks that were listed above! A cool thing about Twig is that is actually supports view inheritance!

Failing That…

If you don’t have the time to learn about using an MVC framework or a templating engine, then you should at least make a huge effort to organize your application into its relevant parts / folders! Examples:

  • Separate your HTML from your business logic.
  • Keep your database connection code in one place. Use the require statement to include it in your scripts.
  • Learn about object-orientated programming.
  • Try to keep your SQL queries separated from the parts of your application that handle requests, redirects and form data.
  • Do NOT echo out HTML with PHP.
  • Keep your folders organised…
  • … and most of all – BE CONSISTENT!

thisinterestsme.com

<?php

// --------------------
// foo() никогда не будет вызвана, т.к. эти операторы являются шунтирующими (short-circuit)

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

// --------------------
// "||" имеет больший приоритет, чем "or"

// Результат выражения (false || true) присваивается переменной $e
// Действует как: ($e = (false || true))
$e false || true;

// Константа false присваивается $f, а затем значение true игнорируется
// Действует как: (($f = false) or true)
$f false or true;

var_dump($e$f);

// --------------------
// "&&" имеет больший приоритет, чем "and"

// Результат выражения (true && false) присваивается переменной $g
// Действует как: ($g = (true && false))
$g true && false;

// Константа true присваивается $h, а затем значение false игнорируется
// Действует как: (($h = true) and false)
$h true and false;

var_dump($g$h);
?>

php.net

You May Also Like

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.