1. Начало
  2. Уеб сайт
  3. Уеб разработка
  4. PHP за начинаещи
  5. PHP оператори
  6. Оператори за сравнение и логически оператори в PHP

Оператори за сравнение и логически оператори в PHP

Другият тип оператори в PHP са операторите за сравнение. Както подсказва наименованието им, те се използват да сравняват стойностите на дадени променливи – дали тези стойности са равни, дали едната е по-голяма от другата и пр. и резултатът, който връщат, може да приема само две стойности – вярно (истина) или невярно (неистина). Можете да си представяте тези оператори във вид на въпроси с които питате: Едната стойност (отляво) по-голяма ли е от другата стойност (отдясно)? Едната стойност равна ли е на другата? Едната стойност различна ли е от другата? и т.н.

Ако резултатите се изведат на екран, тогава, ако резултатът е „вярно“, той се изобразява чрез единица (1), а ако е „невярно“ се изобразява чрез нула (празна стойност).

В PHP съществуват няколко вида оператори. Основните от тях са:

Оператори в PHP (аритметични, за присвояване)

⇒ Оператори за сравнение и логически оператори в PHP

Оператори за инкрементиране и декрементиране в PHP

Оператори за сравнение

Оператори за сравнение са:

== равно ли е на;  връща 1 (вярно) ако стойностите са равни
!= различно ли е от; връща 1 (вярно) ако стойностите са различни
<> различно ли е от; подобно на горния оператор !=
< по-малко ли е от; връща 1 (вярно) ако стойността отляво е по-малка
> по-голямо ли е от; връща 1 (вярно) ако стойността отляво е по-голяма
<= по-голямо или равно ли е; връща 1 (вярно) ако стойността отляво е по-малка или равна на дясната
>= по-малко или равно ли е – връща 1 (вярно) ако стойността отляво е по-голяма или равна на дясната
=== и стойността и типа на променливите ли са равни; връща 1 (вярно) ако не само стойностите, но и типовете на дадени променливи са еднакви

Ще изясним действието на операторите за сравнение с няколко прости примера. Нека да имаме променливите $prom1 и $prom2 и да им зададем съответно стойности 100 и 50, а след това да сравним тези стойности с някой от операторите за сравнение, например с оператора „по-голямо ли е от“ (>):

<?php
$prom1 = 100;
$prom2 = 50;
$sravnenie = ($prom1 > $prom2);
// Питаме: $prom1 по-голямо ли е $prom2?
// Отговорът е: да, тъй като 100 е по-голямо от 50
echo "<b>Резултатът от сравнението е $sravnenie</b>";
?>

След като се изпълни горният код на екрана ще получим:

Резултатът от сравнението е 1

Тъй като използваме за сравнение оператора „по-голямо ли е от“ (>) с този код ние все едно питаме „100 по-голямо ли е от 50?“ и тъй като 100 е по-голямо от 50, то резултатът от сравнението е „истина“ и се изобразява на екрана като единица.

Ако напишем:

$sravnenie = ($prom1 == $prom2);

то резултатът ще бъде празна стойност (неистина), тъй като използваме за извършване на сравнението оператора „равно ли е на“, с което все едно питаме „100 равно ли е на 50?“ и понеже 100 не е равно на 50 получаваме резултат „невярно“.

По същия начин действат и останалите оператори за сравнение. Обърнете внимание, че инструкцията за сравнение се затваря в кръгли скоби – ().

По-особено е единствено действието на последния оператор от списъка, който се изобразява чрез 3 равенства (===). Това е операторът, който сравнява не само стойностите на променливите, но и типа им и връща верен резултат само ако и стойностите и типовете съвпадат. В случая става дума за следната особеност на PHP:

В PHP, за разлика от някои други езици, не е необходимо предварително да се декларира от какъв тип е дадена променлива, тъй като софтуерът на езика автоматично определя типа на променливите според начина, по който са зададени техните стойности. Освен това, когато стойността на дадена променлива е поредица от символи, т.е низ (тип string), то е задължително низът да бъде ограден с единични или двойни кавички. Това означава, че в зависимост от това дали дадена стойност на променлива е оградена в кавички или не PHP интерпретаторът може да я разпознае като два различни типа променлива. Например нека да зададем на променливата $prom1 стойност 100: $prom1 = 100;

Зададена по този начин променливата има тип integer, т.е. цяло число, понеже 100 е цяло число. Ако обаче оградим цифрата 100 в кавички, стойността на променливата ще си остане 100, но типът й вече ще бъде string (низ). В такъв случай кодът:

<?php
$prom1 = 100;
$prom2 = "100";
$sravnenie = ($prom1 === $prom2);
echo "Резултатът от сравнението е $sravnenie";
?>

ще ни върне като резултат „невярно“ (празна стойност), понеже стойностите на променливите са еднакви, но типовете им са различни.

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

Логическите оператори са подобни на операторите за сравнение по това, че също се използват за сравняване на един компонент с друг и също връщат като резултат някоя от двете булеви стойности, т.е. вярно или невярно. Логическите оператори обаче сравняват само цели изрази, в които са използвани операторите за сравнение и са върнали като резултат true или false. Т.е. логическите оператори сравняват не отделни променливи, а само изрази и то притежаващи булева стойност (истина или неистина).

Списък на логическите оператори:

&& логическо И
and логическо И (подобно на &&)
|| логическо ИЛИ
or логическо ИЛИ (подобно на ||)
! логическо отрицание (логическо НЕ)
xor логическо изключващо ИЛИ

Когато работим с логическия оператор „логическо И“ (&&) ние все едно питаме: „И левия И десния израз ли са верни?“. Т.е. този оператор връща 1 (вярно) ако и двата израза от двете му страни връщат резултат true, например:

<?php
$prom1 = 100;
$prom2 = 50;
$log_sravnenie = (($prom1 > $prom2) && ($prom1 != $prom2));
echo "Резултатът от логическото сравнение е $log_sravnenie";
?>

Върнатият резултат от горния код ще бъде 1 (вярно). Това е така, защото първо имаме две сравнения с операторите за сравнение:

($prom1 > $prom2) с което питаме „$prom1 по-голямо ли е от $prom2?“
и
($prom1 != $prom2) с което питаме „$prom1 различно ли е от $prom2?“

И двете сравнения с операторите за сравнение ще ни върнат резултат true, тъй като 100 е по-голямо от 50 и 100 е различно от 50. Следователно и в левия и в десния израз ще имаме резултат „вярно“.

След това сравняваме тези два израза като питаме „И двата израза ли са верни?“. Понеже в случая и двата израза са верни, то като изведем на екран стойността на променливата $log_sravnenie ще получим резултат 1 (вярно).

Забележете, че сравненията с операторите за сравнение са затворени в кръгли скоби, както е затворен в такива скоби и целия израз – сравнението с логическия оператор.

По подобен начин работят и останалите оператори, а именно:

Операторът „логическо ИЛИ“ (||) все едно пита: „Верен ли е поне левия ИЛИ поне десния израз?“ и връща резултат 1 (вярно) ако поне един от изразите е верен.

„Логически изключващото ИЛИ“ (xor) връща резултат „вярно“ ако само единия от двата израза е верен, но не и когато и двата са верни (тогава връща неистина – false). Т.е. с този оператор все едно питаме: „Само единия от двата израза е верен, нали?“ и ако отговорът е „Да“, тогава резултатът е „истина“.

Особеност има само при „логическото НЕ“ (!). Този оператор се използва не с два, а с един израз, като се поставя пред израза. Връща резултат „вярно“ ако изследвания израз е неверен и обратно, т.е. с логическото отрицание все едно питаме: „Този израз НЕ е верен, нали?“ и ако отговорът е положителен, т.е. „Да, не е верен“, тогава резултатът е „истина“:

<?php
$prom1 = 100;
$log_sravnenie = !($prom1 > 500);
echo "Резултатът от логическото сравнение е $log_sravnenie";
?>

Горният код ще върне резултат 1 (вярно), тъй като в израза все едно питаме „Не е вярно, че 100 е по-голямо от 500, нали?“. И понеже 100 наистина не е по-голямо от 500, то резултатът от сравнението с оператора за логическо отрицание е true.

Обновена: 02.04.2022

Беше ли Ви полезна тази статия?

Вижте още