Операции с PHP променливи (оператори). Обработка на числа и математически операции

Програмистите, които трябва да извършват чувствителни числени, научни или статистически изчисления, е малко вероятно да считат уеб скриптовия език за приемлив кандидат за тази роля. Но въпреки горното, езикът PHP предлага отличен набор от функции, които напълно предоставят решение на повечето математически проблеми, които възникват в процеса на изпълнение на скриптове за уеб. Освен това PHP предоставя някои по-разширени възможности, като аритметика с произволна точност, хеширащи библиотеки и криптографски библиотеки.

Разработчиците на езика PHP възприеха добре обоснован подход и не направиха никакъв опит да преоткрият колелата, предназначени за тази цел. Факт е, че много от най-фундаменталните математически функции, използвани в PHP, са просто обвивки около своите аналогове на C.

Математически операции

Повечето математика в PHP се извършва под формата на вградени функции, а не на операции. В допълнение към операторите за сравнение, PHP предлага пет прости аритметични оператора, както и някои оператори за бърз достъп, които ви позволяват да конструирате по-кратки изрази за увеличение, намаляване и присвояване.

Аритметични операции

Петте основни аритметични операции включват тези, които обикновено се прилагат във всеки калкулатор с четири функции, плюс модул (%). Кратко описаниеаритметичните операции са дадени в таблицата:

Аритметични операции
Операция Описание
+ Връща сумата от стойностите на двата си операнда
- Ако има два операнда, тогава стойността на десния операнд се изважда от стойността на левия. Ако има само десен операнд, тогава операцията връща стойността на този операнд с противоположния знак
* Връща произведението на стойностите на двата му операнда
/ Връща резултата с плаваща запетая от разделянето на стойността на левия операнд на стойността на десния операнд
% Връща остатъка от цяло число, разделен на стойността на левия операнд на абсолютната стойност на десния операнд

Когато използвате първите три аритметични операции, описани по-горе (+, -, *) в програма, трябва да вземете предвид, че при извършване на тези операции разпространението на типа става от стойности с плаваща запетая с двойна точност до цели числа. Това означава, че ако и двата операнда на една операция са цели числа, тогава резултатът е цяло число и ако поне един от операндите е число с плаваща запетая с двойна точност, тогава резултатът е число с плаваща запетая с двойна точност номер. Същият тип разпространение се получава при извършване на операция за разделяне; освен това има допълнителен ефект, че резултатът става число с плаваща запетая с двойна точност, ако делението не се извършва без остатък (изцяло).

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

Операции за увеличаване и намаляване

Голяма част от синтаксиса на PHP е извлечен от C, а C програмистите са известни с любовта си към краткостта и се гордеят с нея. Операторите за увеличаване и намаляване, взети от езика C, правят възможно по-сбито представяне на изрази като $count = $count + 1, които обикновено се срещат доста често в програмите.

Операторът за нарастване (++) се използва за добавяне на единица към стойността на променливата, засегната от операцията, а операторът за намаляване (--) изважда единица от стойността на променливата.

Всяка от тези две операции има две разновидности - наставка(в тази форма знакът за операция се поставя непосредствено след променливата, засегната от операцията) и префикс(в тази форма знакът на операцията се поставя непосредствено преди променливата, към която се прилага операцията). И двата сорта имат едно и също страничен ефектсвързани с промяна на стойността на променлива, но суфиксните и префиксните оператори връщат различни стойности, когато се използват като изрази. Суфиксната операция действа така, че стойността на променливата да се промени, след като стойността на израза бъде върната, а префиксната операция действа така, че стойността първо се променя и след това новата стойност се връща към променливата. Тази разлика може да бъде открита чрез използване на операторите за намаляване и увеличение в операторите за присвояване:

PHP код $count = 0; $резултат = $брой++; echo "Резултат от нарастване на $count++: ".$result."
"; $count = 0; $result = ++$count; echo "Резултат от нарастване на ++$count: ".$result."
";

Следните изрази създават следния изход в прозореца на браузъра:

Операции за увеличаване

В този пример операторът $result = $count++ е напълно еквивалентен на операторите:

PHP код $резултат = $брой; $брой = $брой + 1;

Освен това операторът $result = ++$count е еквивалентен на следните оператори:

PHP код $count = $count +1; $резултат = $брой;

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

Операторите за увеличаване (и намаляване) намаляват количеството код, необходим за добавяне на единица към стойността на променлива, но не намаляват количеството код, който присвоява на променлива резултата от добавянето на нейната стойност към друго число или резултата от други аритметични операции . За щастие и петте аритметични оператора имат съответни оператори за присвояване (+=, -=, *=, /= и %=), които ви позволяват да присвоите резултата от аритметична операция върху стойността на тази променлива на променлива в една кратък израз. Например операторът

PHP код $count = $count * 3;

може да бъде съкратено като

PHP код $count *= 3;

Прости математически функции

Следващата стъпка в създаването на програма, по-сложна от тази, която използва само аритметични операции, е използването на всички видове функции. Функциите ви позволяват да изпълнявате задачи като преобразуване от един тип число в друг (вижте статията Типове данни) и намиране на минималното или максималното число в набор от числа. Следната таблица показва прости математически функции:

Прости математически функции на PHP
функция Описание
етаж() Взема един действителен параметър (обикновено число с плаваща запетая с двойна точност) и връща най-голямото цяло число, което е по-малко или равно на този действителен параметър (закръглено надолу)
таван() Името на тази функция е съкращение от думата таван. Функцията взема един действителен параметър (обикновено число с плаваща запетая с двойна точност) и връща най-малкото цяло число, което е по-голямо или равно на този действителен параметър (закръгляване нагоре)
кръгъл() Взема един действителен параметър (обикновено число с плаваща запетая с двойна точност) и връща най-близкото цяло число
коремни мускули() Абсолютната стойност на число. Ако единственият числов действителен параметър има отрицателна стойност, тогава функцията връща съответното положително число; ако действителният параметър е положителен, тогава функцията връща самия действителен параметър
мин() Приема произволен брой числови действителни параметри (но поне един) и връща най-малката от всички действителни стойности на параметри
макс () Приема произволен брой числови действителни параметри (но не по-малко от един) и връща най-голямата от всички действителни стойности на параметри

Например резултатът от следния израз е 3, тъй като стойността на всеки израз за извикване на функция също е 3:

PHP код $резултат = min(3, abs(-3), max(round(2.7), ceil(2.3), floor(3.9))));

Генериране на случайни числа

Езикът PHP използва два генератора на произволни числа (извиквани съответно чрез функциите ранд ()И mt_rand()). Всеки от тези генератори е свързан с три функции със същата цел: функцията за задаване на първоначалната стойност ( srand()И mt_srand()), самата функция за получаване на произволно число и функцията, която взема проби от най-голямото цяло число, което може да бъде върнато от генератора (( getrandmax()И mt_getrandmax())). Функциите getrandmax() и mt_getrandmax() връщат най-голямото число, което може да бъде върнато от rand() или mt_rand(), което е ограничено до 32768 на платформи на Windows.

Изборът на конкретната функция за генериране на псевдослучайни числа, използвана във функцията rand(), може да зависи от това с кои библиотеки е компилиран PHP интерпретаторът. За разлика от това, генераторът mt_rand() винаги използва една и съща функция за генериране на псевдослучайни числа (mt е съкращение от Mersenne Twister), а авторът на оперативната документация за функцията mt_rand() твърди, че тази функция също е по-бърза и " повече случаен" (от криптографска гледна точка), отколкото rand(). Нямаме причина да се съмняваме в истинността на тези твърдения, поради което предпочитаме да използваме функцията mt_rand(), а не rand().

Когато използвате някои версии на PHP на някои платформи, изглежда, че функциите rand() и mt_rand() произвеждат привидно разумни произволни числа, дори без първо да зададете семе. Но на подобно впечатление не бива да се вярва. Първо, програмите, които използват функции за генериране на произволни числа без посочване на начална стойност, не могат лесно да бъдат прехвърлени на други платформи и, второ, надеждната работа на тези функции без посочване на начална стойност не е гарантирана.

Типичният начин за задаване на началната стойност за който и да е от генераторите на произволни числа на PHP (с помощта на функцията mt_srand() или srand() е както следва:

PHP код mt_srand((двойно)микровреме()*1000000);

Този оператор задава първоначалната стойност на генератора, равна на броя микросекунди, които са изминали до този момент от отчитането на последната цяла секунда. (Преобразуването на double в този оператор всъщност е необходимо, тъй като функцията microtime() връща низ, който се третира като цяло число в операцията за умножение, но не и в операцията за предаване на параметри към функцията.) Препоръчваме на читателя да въведе посочения оператор за инициализация, дори ако целта на този оператор не му е напълно ясна; Простото поставяне на този оператор на всяка PHP страница, само веднъж, преди да използвате съответната функция mt_rand() или rand(), ще гарантира, че началната точка се променя и следователно създава различна произволна последователност всеки път.

The специфичен методнастройката на първоначалната стойност беше дълбоко обмислена от онези специалисти, които напълно разбират всички нюанси на генериране на псевдослучайни числа, следователно, най-вероятно, тя завинаги ще остане по-добра от всякакви опити на всеки отделен програмист да излезе с нещо по-„сложно“ .

Очевидно тези функции за генериране на псевдослучайни числа връщат само цели числа, но произволно цяло число от даден диапазон може лесно да бъде преобразувано в съответно число с плаваща запетая (да речем число от диапазона от 0,0 до 1,0 включително), като се използва израз като rand () / getrandmax(). Посоченият диапазон може след това да бъде мащабиран и изместен според нуждите. По-долу е даден пример:

PHP код // Да кажем, че трябва да генерираме произволно числоот 100.0 до 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $random."
"; // Генериране на цели числа (100 - 120); echo round($random);

Опитайте да опресните страницата с този код няколко пъти, за да сте сигурни, че се генерират произволни числа.

Математически константи

В PHP версия 4.0 имаше само една математическа константа, описана в документацията - M_PI (стойността на π, представена като число с плаваща запетая с двойна точност). И започвайки с PHP 4.0.2, бяха въведени много нови константи. Повечето от тези нови константи, свързани с π (или неговите кратни), e (или неговите кратни) и квадратни корени; освен това някои константи принадлежат към други типове. Но в следващите версии, поради редица причини, списъкът с константи отново беше намален до сравнително малък брой предварително дефинирани математически константи:

PHP математически константи
Константа Описание
M_PI π
M_PI_2 π/2
M_PI_4 π/4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / sqrt(π)
M_E д
M_SQRT2 sqrt (2)
M_SQRT1_2 1 / sqrt(2)
M_LOG2E log2(e)
M_LOG10E лог(д)
M_LN2 лого (2)
M_LN10 лого (10)

Проверява се числовият формат

Езикът PHP предоставя редица функции, които ви позволяват да проверите правилното представяне на числата. Въпреки че PHP няма стриктна проверка на типа, препоръчително е да внедрите някои от тези проверки в кода си, когато е необходимо, за да можете да предвидите характеристиките на резултатите, които получавате, както и да изберете най-добрия начинобработката им.

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

Използване на функции is_int()И is_floatМожете да определите дали едно число е цяло число или дроб. Още две проверки са малко по-сложни: функции is_finite()И is_infinite()ви позволяват да извършвате точно тестовете, които техните имена показват (независимо дали броят е краен или безкраен). Но, строго погледнато, диапазонът от стойности, върху който се простират тези функции, не може да включва действителна безкрайност (и може ли дори да се провери дали числото има безкрайност? голямо значение?). Вместо това се използват границите на диапазона от стойности с плаваща запетая, разрешени за конкретната система.

По-долу е даден пример за използване на тези функции:

PHP код is_numeric(4); // вярно is_numeric(25 - 6); // вярно is_numeric("25"); // вярно is_numeric("25 - 6"); // невярно is_int(4); // вярно is_int(4.2); // невярно is_int("4"); // false - тази проверка е по-строга от проверката с помощта на функцията is_numeric() is_float(4); // невярно is_float(4.0); // вярно is_float(M_PI); // вярно

Преобразуване на бройни системи

По подразбиране PHP използва основа 10, за да преобразува числови стойности от външно във вътрешно представяне напред и назад. Можете също така да кажете на PHP интерпретатора, че външното представяне използва осмични числа с основа 8 (за да направите това, трябва да въведете водеща 0 ), или шестнадесетични числа, посочени в база 16 (за да направите това, трябва да поставите пред числото 0x).

Разбира се, след преобразуване на числата от външно представяне във вътрешно, те се съхраняват в паметта в двоичен формат и всички основни аритметични и математически изчисления се извършват в операционна системав база 2. Освен това PHP предоставя редица функции за преобразуване на числа от една база в друга. Главна информацияТези функции са показани в таблицата по-долу:

Функции за преобразуване на бройна система
функция Описание
BinDec() Взема един параметър на низ, който е двоично цяло число (число с основа 2) и връща представянето на низ с основа 10 на това число
DecBin() Подобно на BinDec(), но преобразува от база 10 в база 2
Окт Дек() Подобно на BinDec(), но преобразува от база 8 в база 10
DecOct() Подобно на BinDec(), но преобразува от основа 10 в основа 8
HexDec() Подобно на BinDec(), но преобразува от база 16 в база 10
DecHex() Подобно на BinDec(), но преобразува от база 10 в база 16
base_convert() Приема низов параметър (представляващ цялото число за преобразуване) и два целочислени параметъра (оригиналния и желания корен). Връща низ, представляващ преобразуваното число. В този ред са представени числа, по-големи от 9 (от 10 до 35). символи a-z. Както оригиналната, така и желаната база трябва да са в диапазона 2-36

Всички функции за преобразуване на числови системи са функции със специално предназначение, които преобразуват числа от една конкретна база в друга. Изключение прави функцията base_convert(), която приема произволни параметри, указващи първоначалната и получената база.

Обърнете внимание, че всички функции за преобразуване на числови системи приемат параметри на низове и връщат стойности на низове, но можете да използвате десетични числови параметри и да разчитате на PHP интерпретатора да извърши правилно преобразуването на типа. С други думи, както DecBin("1234"), така и DecBin(1234) дават един и същ резултат.

Степени и логаритми

Езикът PHP включва стандартни експоненциални и логаритмични функции в две разновидности – за работа с база 10 и база e (които са показани в таблицата).

PHP предоставя функция exp() за повишаване на e на дадена степен, но няма функция с един параметър за повишаване на 10 на дадена степен. Въпреки това можете да използвате вместо това функцията pow(), която приема два параметъра, давайки 10 като първи параметър.

Можете да проверите дали експоненциалните и логаритмичните функции с една и съща основа са обратни една на друга, като проверите идентичността на резултатите, получени по този начин:

PHP код $test_449 = 449.0; $test_449 = pow(10, exp(log(log10($test_449)))); ехо "test_449 = $test_449"; // test_449 = 449

Тригонометрични функции

Езикът PHP предоставя стандартен набор от основни тригонометрични функции, общата информация за които е дадена в таблицата:

Тригонометрични функции
функция Описание
пи() Не приема параметри и връща приблизителна стойност π (3,1415926535898). Може да се използва взаимозаменяемо с константата M_PI
грях() Приема числов параметър в радиани и връща синуса на параметъра като число с плаваща запетая с двойна точност
защото () Взема числов параметър в радиани и връща косинуса на параметъра като число с плаваща запетая с двойна точност
тен () Приема числов параметър в радиани и връща тангенса на параметъра като число с плаваща запетая с двойна точност
asin() Взема числов параметър и връща арксинуса на параметъра в радиани. Входовете трябва да са между -1 и 1 (функцията, получаваща входове извън този диапазон, води до NAN резултат). Резултатите варират от -π/2 до π/2
acos() Взема числов параметър и връща арккосинуса на параметъра в радиани. Входовете трябва да са в диапазона от -1 до 1 (функцията, получаваща входове извън този диапазон, води до NAN резултат. Резултатите са в диапазона от 0 до π
тен() Взема числов параметър и връща аркутангенса на параметъра в радиани. Резултатите варират от -π/2 до π/2

По-долу е даден пример за съставяне на таблица за изчисляване на тригонометрични функции за „стандартни“ ъгли:

PHP код функция display_trigonometry($func_array, $input_array) ( // Ехо на заглавката на функцията " "; ) ехо ""; // Отпечатване на останалата част от таблицата foreach($input_array като $input) ( echo " "; foreach($func_array като $func) ( ехо " "; ) ехо ""; ) ехо "
Значение/функция$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); ехо "
"; ) display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Пример за използване на тригонометрични функции в PHP

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

Изчисление с произволна точност (използване на BC функции)

Типовете цели числа и с плаваща запетая с двойна точност са напълно подходящи за повечето математически проблеми, срещани при уеб скриптове, но всеки екземпляр на стойността, представена от тези типове, изисква фиксирано количество компютърна памет, така че размерът и точността на числовото представяне на тези типове неизбежно налагат ограничения.

Разбира се, диапазоните на точните стойности на тези типове данни може да зависят от архитектурата на сървърния компютър, но целочислените стойности обикновено могат да варират от -2 31 -1 до 2 31 -1, а числата с плаваща запетая с двойна точност могат представляват числа с точност от около 13 до 14 десетични цифри. От друга страна, за решаване на проблеми, които изискват използването на по-широк диапазон на представяне или по-голяма точност, PHP предоставя математически функции с произволна точност(наричани още BC функции, кръстени на Unix-базираната помощна програма за изчисления с произволна точност).

Възможно е функциите за произволна точност да не са включени в компилацията на PHP интерпретатора, особено ако потребителят е направил компилацията сам, тъй като за това потребителят би трябвало да знае, че на етапа на конфигуриране е необходимо да се включи квадратче за отметка в параметри --enable-bcmath. За да проверите дали посочените функции са налични, опитайте да изчислите израза bcadd("1","1"). Ако получите съобщение за грешка, което посочва недефинирана функция, ще трябва да конфигурирате отново PHP интерпретатора и да го компилирате отново.

BC функциите използват нечислови типове с представяне като параметри и връщани стойности фиксирана дължина, и линиите. Тъй като в PHP дължината на низовете е ограничена само от размера достъпна памет, числата, използвани в изчисленията, могат да бъдат с произволна дължина. Основните изчисления се правят в десетична форма и са много подобни на тези, които човек може да направи с молив и хартия (ако може да работи много бързо и да бъде търпелив). Целочислените функции на BC са прецизни и ви позволяват да използвате толкова цифри, колкото е необходимо, докато функциите с плаваща запетая извършват изчисления с точност до определен брой десетични знаци. Обща информация за функциите на BC е дадена в таблицата по-долу:

Математически функции с произволна точност (BC функции)
функция Описание
bcadd() Приема два низови параметъра, представляващи числа, и незадължителен целочислен параметър, указващ коефициент на мащабиране. Връща сумата от първите два параметъра като низ, като броят на десетичните знаци в резултата се определя от параметъра, указващ коефициента на мащабиране. Ако параметърът, указващ коефициента на мащабиране, не е посочен, тогава се използва коефициентът на мащабиране по подразбиране
bcsub() Подобно на bcadd(), но връща резултата от изваждането на втория параметър от първия
bcmui() Подобно на bcadd(), с изключение на това, че връща резултата от умножаването на своите параметри
bcdiv() Подобно на bcadd(), но връща резултата от разделянето на първия параметър на втория
bcmod() Връща модула (остатъка) от деленето на първия параметър на втория. Тъй като върнатата стойност е цяло число, функцията не приема параметър, указващ коефициент на мащабиране
bcpow() Повишава първия параметър до степента, определена от втория параметър. Броят на десетичните знаци в резултата се определя от мащабния фактор, ако е зададен такъв
bcsqrt() Се завръща Корен квадратенпараметър с брой десетични знаци, определени от стойността на незадължителния мащабен коефициент
bcscale() Задава мащабния фактор по подразбиране за последващи извиквания на функцията BC

Повечето от тези функции приемат като последен параметър незадължителен коефициент на мащабиране (цяло число), който определя колко знака след десетичната запетая трябва да има резултатът. Ако този параметър не е указан, коефициентът на мащабиране по подразбиране се използва като коефициент на мащабиране, който от своя страна може да бъде зададен чрез извикване на функцията bcscale(). Стойността по подразбиране за тази стойност по подразбиране (т.е. стойността, която се използва, ако скриптът не извиква bcscale()) може също да бъде зададена във файла за инициализация php.ini.

По-долу е даден пример за използване на функция за произволна точност за точно изпълнение на целочислени аритметични операции. Изпълнение на следния код:

PHP код за ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Точно изчисляване на астрономически величини с помощта на BC функции

Ако за тези изчисления беше използван обикновен PHP целочислен тип, тогава целочисленото препълване ще се случи много преди края на изчислението, така че останалата част от цикъла ще извърши изчисления, за да получи приблизително число с плаваща запетая.

Масиви Обработка на формуляри 1 2 3 4 5 6 7 8 9 10

Операции с PHP променливи (оператори)

Има различни групи за изпълнение.

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

Аритметични операции в PHP

Помните ли училищните основи на аритметиката? Изявленията по-долу работят по същия начин.

Операторът за деление ("/") винаги връща реален тип, дори и двете стойности да са цели числа (или низове, които се преобразуват в цели числа). В противен случай резултатът ще бъде частичен.

Операцията за изчисляване на остатъка от деленето " % " работи само с цели числа, така че прилагането му към дроби може да доведе до нежелани резултати.

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

Операции за увеличаване и намаляване

PHP, подобно на C, поддържа префиксни и постфиксни оператори за увеличаване и намаляване.

Постфиксни оператори за инкремент и декремент

Както в C, тези оператори увеличават или намаляват стойността на променлива и в израз връщат стойността на променливата $aпреди промяната. Например:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Отпечатва a=11, b=10

Както можете да видите, първо променливата $bстойност, присвоена на променлива $a, и едва тогава последният беше увеличен. Въпреки това, изразът, чиято стойност е присвоена на променливата $b, може да е по-трудно - във всеки случай, увеличение $aще стане само след като бъде изчислено.

Префиксни оператори за увеличаване и намаляване

Има също оператори за увеличаване и намаляване, които са посочени, а не след името на променливата. Съответно те връщат стойността на променливата след промяната. Пример:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Отпечатва a=9, b=9

Операциите за увеличаване и намаляване се използват много често в практиката. Например, те се появяват в почти всеки цикъл за .

ехо "

Постфиксно увеличение

" ;
$a = 5;
echo "Трябва да бъде 5: ". $a++. "
\н" ;

\н" ;

Ехо "

Увеличение на префикса

" ;
$a = 5;
echo "Трябва да е 6: ". ++ $a . "
\н" ;
echo "Трябва да бъде 6: ". $a. "
\н" ;

Ехо "

Постфикс декремент

" ;
$a = 5;
echo "Трябва да бъде 5: ". $a -- . "
\н" ;

\н" ;

Ехо "

Декремент на префикса

" ;
$a = 5;
echo "Трябва да е 4: ". -- $a . "
\н" ;
echo "Трябва да е 4: ". $a. "
\н" ;
?>

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

PHP има два оператора за работа с низове. Първият е операторът за конкатенация ("."), който връща конкатенацията на левия и десния аргумент. Вторият е оператор за присвояване с конкатенация, който добавя десния аргумент към левия. Да дадем конкретен пример:

$a = "Здравей" ;
$b = $a. "Свят!" ; // $b съдържа низа "Hello World!"

$a = "Здравей" ;
$a .= "Свят!" ; // $a съдържа низа "Hello World!"
?>

Побитови операции

Тези операции са предназначени да управляват (настройват/изключват/проверяват) групи от битове в цяла променлива. Битовете на цяло число не са нищо повече от отделни цифри на едно и също число, записано в двоичната бройна система. Например в двоична система числото 12 би изглеждало като 1100, а 2 би изглеждало като 10, така че изразът 12|2 ще ни върне числото 14 (1110 в двоична система). Ако една променлива не е цяло число, тогава е
първо закръглено и след това към него се прилагат следните оператори.

За представяне на едно число се използват 32 бита:

  • 0000 0000 0000 0000 0000 0000 0000 0000 е нула;
  • 0000 0000 0000 0000 0000 0000 0000 0001 е 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 е 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 е 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 е 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 е 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 е 15;

Побитови оператори:

Пример Име Резултат
$a и $b Побитово "и" Само онези битове, които са зададени и в $a, и в $b, са зададени.
$a | $b Побитово "или" Тези битове, които са зададени в $a или $b, са зададени.
$a^$b Изключително или Само онези битове, които са зададени само в $a или само в $b, са зададени
~$a Отрицание Тези битове, които не са зададени в $a, се задават и обратно.
$a<< $b Преместване наляво Всички битове на променлива $a се изместват $b позиции наляво (всяка позиция предполага "умножение по 2")
$a >> $b Shift надясно Всички битове на променлива $a се изместват $b позиции надясно (всяка позиция предполага "деление на 2")

Операции за сравнение

Операторите за сравнение, както подсказва името им, ви позволяват да сравнявате две стойности.

Това са уникални операции по свой собствен начин, защото, независимо от типа на техните аргументи, те винаги връщат едно от двете неща: невярноили вярно. Операциите за сравнение сравняват две стойности една с друга и, ако условието е вярно, се връщат вярно, И ако не - невярно.

PHP позволява да се сравняват само скаларни променливи. Масивите и обектите не могат да се сравняват в PHP. Те дори не могат да бъдат сравнени за равенство (с помощта на оператора ==), но PHP не издава предупреждение при извършване на такава операция. И така, след като веднъж се чудех защо два напълно различни масива, когато ги сравняваме с помощта == внезапно се окажат еднакви, не забравяйте, че преди сравнение и двата операнда се преобразуват в дума масив, който след това се сравнява.

Вижте Сравнение на масиви за подробности.

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

Пример Име Резултат
$a == $b Равно на ВЯРНОако $a е равно на $b.
$a === $b Идентично равни ВЯРНОако $a е равно на $b и има същия тип. (Добавено в PHP 4)
$a != $b Не е равно ВЯРНОако $a не е равно на $b.
$a<>$b Не е равно ВЯРНОако $a не е равно на $b.
$a !== $b Идентичното не е равно ВЯРНОако $a не е равно на $b или ако са различни видове(Добавено в PHP 4)
$a< $b По-малко ВЯРНОако $a е строго по-малко от $b.
$a > $b | Повече ▼ ВЯРНОако $a е строго по-голямо от $b.
$a<= $b По-малко или равно ВЯРНОако $a е по-малко или равно на $b.
$a >= $b Повече или равно ВЯРНОако $a е по-голямо или равно на $b.

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

Логическите оператори са предназначени изключително за работа с булеви изрази, а също и за връщане невярноили вярно.

Ето таблица с PHP логически оператори:

Трябва да се отбележи, че оценката на логически изрази, съдържащи такива оператори, винаги се извършва отляво надясно и ако резултатът вече е очевиден (напр. невярно&&нещовинаги дава невярно), тогава изчисленията се прекратяват, дори ако изразът съдържа извиквания на функции. Например в оператора $logic = 0&&(time()>100); стандартна функция време()никога няма да бъде призован.

Бъдете внимателни с логическите операции - не забравяйте за удвояването на знаци. Моля, имайте предвид, че напр. | И || - два напълно различни оператора, единият от които потенциално може да върне всяко число, а вторият - само невярноИ вярно.

Операторите за увеличаване (++) и намаляване (--) не работят с булеви променливи.

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

В PHP, започвайки от PHP4, има идентичен оператор за сравнение - троен знак за равенство === ,
или оператора за проверка. PHP е доста толерантен към низове, които имплицитно се преобразуват в числа, и обратно.
Например, следният код ще отпечата, че стойностите на променливите са равни:

$a=10;
$b="10";

И това въпреки факта, че променливата $aпредставлява число и $b- линия. Сега нека разгледаме малко по-различен пример:

$a=0; // нула
$b=""; // празен ред
if($a==$b) echo "a и b са равни"; // Отпечатва "a и b са равни"

Макар че $aИ $bочевидно не са равни дори в обичайния смисъл на думата, скриптът ще декларира, че са еднакви. Защо се случва това? Въпросът е, че ако един от операндите на логически оператор може да се интерпретира като число, тогава и двата операнда се третират като числа. В този случай празният ред се превръща в 0 , което след това се сравнява с нула. Не е изненадващо, че операторът еховърши работа.
Задачата се решава от оператора за еквивалентност === (тройно равенство). Той не само сравнява два израза, но и техните видове. Нека пренапишем нашия пример, като използваме този оператор.

Последна актуализация: 01.11.2015 г

В PHP можем да използваме различни оператори: аритметични, логически и др. Нека разгледаме всеки тип операция.

Аритметични операции

    + (операция за добавяне)

    Например $a + 5

    - (операция за изваждане)

    Например $a - 5

    * (умножение)

    Например $a * 5

    / (деление)

    Например $a / 5

    % (получаване на остатъка от делението)

    Например: $a=12; ехо $a % 5; // е равно на 2

    ++ (увеличаване/увеличаване на стойността с единица)

    Например ++$a

    Важно е да разберете разликата между изразите ++$a и $a++. Например:

    $a=12; $b=++$a; // $b е равно на 13 echo $b;

    Тук първо се добавя единица към стойността на променливата $a, а след това нейната стойност се приравнява към променливата $b. Би било различно, ако изразът изглеждаше така: $b=$a++; . Тук първо стойността на променливата $a беше равна на променливата $b, а след това стойността на променливата $a беше увеличена.

    -- (намаляване/намаляване на стойността с единица)

    Например, --$a. И също така, както в случая с нарастване, има два вида запис: --$a и $a--

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

    Приравнява променлива към конкретна стойност: $a = 5

    Събиране, последвано от присвояване на резултата. Например: $a=12; $a += 5; ехо $a; // равно на 17

    Изваждане, последвано от присвояване на резултата. Например: $a=12; $a -= 5; ехо $a; // е равно на 7

    Умножение, последвано от присвояване на резултата: $a=12; $a *= 5; ехо $a; // е равно на 60

    Деление, последвано от присвояване на резултата: $a=12; $a /= 5; ехо $a; // равно на 2,4

    Свързване на редове и присвояване на резултата. Отнася се за два реда. Ако променливите не съхраняват низове, а например числа, тогава техните стойности се преобразуват в низове и след това се изпълнява операцията: $a=12; $a .= 5; ехо $a; // равно на 125 // идентично на $b="12"; $b .="5"; // равно на 125

    Получаване на остатъка от деление и след това присвояване на резултата: $a=12; $a %= 5; ехо $a; // е равно на 2

Операции за сравнение

Операциите за сравнение обикновено се използват в условни конструкции, когато е необходимо да се сравнят две стойности и в зависимост от резултата от сравнението да се извършат определени действия. Налични са следните операции за сравнение.

    Операторът за равенство сравнява две стойности и ако те са равни, връща true, в противен случай връща false: $a == 5

    Операторът за идентичност също сравнява две стойности и ако те са равни, връща true, в противен случай връща false: $a === 5

    Сравнява две стойности и ако не са равни, връща true, в противен случай връща false: $a != 5

    Сравнява две стойности и ако не са равни, връща true, в противен случай връща false: $a !== 5

    Сравнява две стойности и ако първата е по-голяма от втората, връща true, в противен случай връща false: $a > 5

    Сравнява две стойности и ако първата е по-малка от втората, връща true, в противен случай връща false: $a< 5

    Сравнява две стойности и ако първата е по-голяма или равна на втората, връща true, в противен случай връща false: $a >= 5

    Сравнява две стойности и ако първата е по-малка или равна на втората, връща true, в противен случай връща false: $a<= 5

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

И двата оператора сравняват два израза и връщат true, ако изразите са равни. Но между тях има разлики. Ако операцията за равенство приема две стойности от различни типове, тогава те се свеждат до една - тази, която интерпретаторът намира за оптимална. Например:

Очевидно променливите съхраняват различни стойности от различни типове. Но когато се сравнят, те ще бъдат сведени до един и същи тип - числови. И променливата $a ще бъде намалена до числото 22. И в крайна сметка и двете променливи ще бъдат равни.

Или, например, следните променливи също ще бъдат равни:

$a = невярно; $b = 0;

За да се избегнат подобни ситуации, се използва операцията за еквивалентност, която взема предвид не само стойността, но и типа на променливата:

$a = "22a"; $b = 22; if($a===$b) echo "equal"; else echo "не е равно";

Сега променливите няма да са равни.

Операторите за неравенство != и !== работят по подобен начин.

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

Логическите операции обикновено се използват за комбиниране на резултатите от две операции за сравнение. Например, трябва да извършим определено действие, ако са изпълнени няколко условия. Налични са следните логически операции:

    Връща true, ако и двете сравнения връщат true, в противен случай връща false: $a == 5 && $b = 6

    Подобно на операцията &&: $a == 5 и $b > 6

    Връща true, ако поне една операция за сравнение върне true, в противен случай връща false: $a == 5 || $b = 6

    Подобно на операцията || : $a< 5 or $b > 6

    Връща true, ако операцията за сравнение върне false: !($a >= 5)

    Връща true, ако само една от стойностите е true. Ако и двете са вярно или нито едно не е вярно, връща false. Например: $a=12; $b=6; if($a xor $b) ехо "true"; else echo "false";

    Тук резултатът от логическата операция ще бъде false, тъй като и двете променливи имат специфична стойност. Нека променим кода:

    $a=12; $b=NULL; if($a xor $b) ехо "true"; else echo "false";

    Тук резултатът вече ще бъде верен, тъй като стойността на една променлива не е зададена. Ако една променлива има стойност NULL, тогава в логическите операции нейната стойност ще се третира като false

Битови операции

Операциите с битове се извършват върху отделни битове на число. Числата се разглеждат в двоично представяне, например 2 в двоично представяне е 010, числото 7 е 111.

    & (логическо умножение)

    Умножението се извършва побитово и ако и двата операнда имат битови стойности, равни на 1, тогава операцията връща 1, в противен случай се връща числото 0. Например: $a1 = 4; //100 $b1 = 5; //101 ехо $a1 & $b1; // е равно на 4

    Тук числото 4 в двоичната система е 100, а числото 5 е 101. Умножете числата побитово и получете (1*1, 0*0, 0 *1) = 100, тоест числото 4 в десетичен формат.

    | (логично допълнение)

    Подобно на логическото умножение, операцията се извършва и върху двоични цифри, но сега се връща единица, ако поне едно число в дадена цифра има единица. Например: $a1 = 4; //100 $b1 = 5; //101 ехо $a1 | $b1; // е равно на 5

    ~ (логическо отрицание)

    обръща всички битове: ако битовата стойност е 1, тогава тя става нула и обратно. $b = 5; ехо ~$b;

    х<

    x>>y - измества числото x надясно с y цифри. Например 16>>1 измества 16 (което е 10 000 в двоична система) с една позиция надясно, което води до 1000 или 8 в десетична система

Конкатениране на низове

Операторът точка се използва за свързване на низове. Например, нека свържем няколко реда:

$a="Здравей,"; $b=" свят"; ехо $a. $b. "!";

Ако променливите представляват други типове, различни от низове, като например числа, тогава техните стойности се преобразуват в низове и тогава също се извършва операцията за конкатенация на низове.