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

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

3. Оператори за сравнение
== равно ли е на – връща 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“;

?>

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

4. Логически оператори
Логическите оператори са подобни на операторите за сравнение по това, че също се използват за сравняване на един компонент с друг и също връщат като резултат някоя от двете булеви стойности, т.е. вярно или невярно. Логическите оператори обаче сравняват само цели изрази, в които са използвани операторите за сравнение и са върнали като резултат 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.