PHP: Aritmetički operatori. Kako izvesti cijelobrojno dijeljenje u PHP-u Php ostatak dijeljenja

04.09.2024

Programeri koji treba da izvrše osjetljive numeričke, naučne ili statističke proračune vjerovatno neće smatrati skriptni jezik weba prihvatljivim kandidatom za ovu ulogu. Ali, uprkos gore navedenom, PHP jezik nudi odličan skup funkcija koje u potpunosti pružaju rješenje za većinu matematičkih problema koji se javljaju u procesu izvršavanja skripti za web. Osim toga, PHP pruža neke naprednije mogućnosti, kao što su aritmetika proizvoljne preciznosti, biblioteke heširanja i kriptografske biblioteke.

Programeri PHP jezika zauzeli su dobro utemeljen pristup i nisu pokušali da ponovo izmisle točkove dizajnirane za ovu svrhu. Činjenica je da su mnoge od najfundamentalnijih matematičkih funkcija koje se koriste u PHP-u jednostavno omotači svojih C pandana.

Matematičke operacije

Većina matematike u PHP-u se radi u obliku ugrađenih funkcija, a ne operacija. Pored operatora poređenja, PHP nudi pet jednostavnih aritmetičkih operatora, kao i neke prečice koje vam omogućavaju da konstruišete kraće izraze povećanja, dekrementa i dodele.

Aritmetičke operacije

Pet osnovnih aritmetičkih operacija uključuje one koje se obično implementiraju u bilo kojem četverofunkcijskom kalkulatoru, plus modul (%). Kratak opis aritmetičkih operacija dat je u tabeli:

Aritmetičke operacije
Operacija Opis
+ Vraća zbir vrijednosti svoja dva operanda
- Ako postoje dva operanda, tada se vrijednost desnog operanda oduzima od vrijednosti lijevog. Ako postoji samo desni operand, tada operacija vraća vrijednost tog operanda sa suprotnim predznakom
* Vraća proizvod vrijednosti svoja dva operanda
/ Vraća rezultat s pomičnim zarezom dijeljenja vrijednosti lijevog operanda vrijednošću desnog operanda
% Vraća ostatak cijelog broja podijeljen vrijednošću lijevog operanda sa apsolutnom vrijednošću desnog operanda

Prilikom korištenja prve tri gore opisane aritmetičke operacije (+, -, *) u programu, treba uzeti u obzir da prilikom izvođenja ovih operacija dolazi do širenja tipa od vrijednosti s pomičnim zarezom dvostruke preciznosti do cjelobrojnih vrijednosti. To znači da ako su oba operanda operacije cijeli brojevi, onda je rezultat cijeli broj, a ako je barem jedan od operanada broj s pomičnim zarezom dvostruke preciznosti, onda je rezultat dvostruko precizni broj s pomičnim zarezom broj. Širenje istog tipa dešava se prilikom izvođenja operacije podjele; osim toga, postoji dodatni efekat da rezultat postaje broj s pomičnim zarezom dvostruke preciznosti ako se dijeljenje ne izvrši bez ostatka (u potpunosti).

Operacija modulo (%) u PHP-u prihvata celobrojne operande, a kada se ova operacija primeni na brojeve sa pomičnim zarezom dvostruke preciznosti, onda se ovi brojevi prvo pretvaraju u cele brojeve (odbacivanjem razlomka). Rezultat takve operacije je uvijek cijeli broj.

Operacije povećanja i smanjenja

Većina PHP sintakse je izvedena iz C, a C programeri su poznati po svojoj ljubavi prema sažetosti i ponose se time. Operatori povećanja i dekrementa, preuzeti iz jezika C, omogućavaju konciznije predstavljanje izraza poput $count = $count + 1, koji se obično često nalaze u programima.

Operator povećanja (++) se koristi za dodavanje jedan vrijednosti varijable na koju operacija utiče, a operator dekrementa (--) oduzima jedan od vrijednosti te varijable.

Svaka od ove dvije operacije ima dvije varijante - sufiks(u ovom obliku znak operacije se postavlja odmah iza varijable na koju operacija utiče) i prefiks(u ovom obliku, znak operacije se postavlja neposredno ispred varijable na koju se operacija odnosi). Oba imaju istu nuspojavu promjene vrijednosti varijable, ali operatori sufiksa i prefiksa vraćaju različite vrijednosti kada se koriste kao izrazi. Operacija sufiksa radi tako da se vrijednost varijable mijenja nakon što se vrati vrijednost izraza, a operacija prefiksa radi tako da se vrijednost prvo mijenja, a zatim se nova vrijednost vraća varijabli. Ova razlika se može otkriti korištenjem operatora dekrementa i inkrementa u operatorima dodjele:

PHP kod $count = 0; $rezultat = $broj++; echo "Rezultat povećanja $count++: ".$result."
"; $count = 0; $result = ++$count; echo "Rezultat povećanja broja ++$count: ".$result."
";

Sljedeće izjave daju sljedeći izlaz u prozoru pretraživača:

Operacije povećanja

U ovom primjeru, operator $result = $count++ potpuno je ekvivalentan operatorima:

PHP kod $rezultat = $broj; $count = $count + 1;

Uz to, operator $result = ++$count je ekvivalentan sljedećim operatorima:

PHP kod $count = $count +1; $rezultat = $broj;

Operatori dodjele

Operatori povećanja (i dekrementa) smanjuju količinu koda potrebnog za dodavanje jedan vrijednosti varijable, ali ne smanjuju količinu koda koji varijabli dodjeljuje rezultat dodavanja njene vrijednosti drugom broju ili rezultat drugih aritmetičkih operacija . Srećom, svih pet aritmetičkih operatora imaju odgovarajuće operatore dodjeljivanja (+=, -=, *=, /= i %=), koji vam omogućavaju da rezultat aritmetičke operacije na vrijednosti te varijable dodijelite varijabli u jednom kratak izraz. Na primjer, operater

PHP kod $count = $count * 3;

može biti skraćeno kao

PHP kod $count *= 3;

Jednostavne matematičke funkcije

Sljedeći korak u stvaranju kompleksnijeg programa od onog koji koristi samo aritmetičke operacije je korištenje svih vrsta funkcija. Funkcije vam omogućavaju da izvršite zadatke kao što je pretvaranje iz jednog tipa broja u drugi (pogledajte članak Tipovi podataka) i pronalaženje minimalnog ili maksimalnog broja u skupu brojeva. Sljedeća tabela prikazuje jednostavne matematičke funkcije:

Jednostavne PHP matematičke funkcije
Funkcija Opis
sprat() Uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najveći cijeli broj koji je manji ili jednak tom stvarnom parametru (zaokruži prema dolje)
ceil() Naziv ove funkcije je skraćenica od riječi plafon. Funkcija uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najmanji cijeli broj koji je veći ili jednak tom stvarnom parametru (zaokruživanje na gore)
okruglo () Uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najbliži cijeli broj
trbušnjaci() Broj modula. Ako jedini numerički stvarni parametar ima negativnu vrijednost, tada funkcija vraća odgovarajući pozitivan broj; ako je stvarni parametar pozitivan, tada funkcija sama vraća stvarni parametar
min() Prihvata bilo koji broj brojčanih stvarnih parametara (ali ne manje od jednog) i vraća najmanju od svih stvarnih vrijednosti parametara
max() Prihvata bilo koji broj brojčanih stvarnih parametara (ali barem jedan) i vraća najveću od svih stvarnih vrijednosti parametara

Na primjer, rezultat sljedećeg izraza je 3 jer je vrijednost svakog izraza poziva funkcije također 3:

PHP kod $rezultat = min(3, abs(-3), max(okruglo(2.7), strop(2.3), pod(3.9)));

Generisanje slučajnih brojeva

PHP jezik koristi dva generatora slučajnih brojeva (pozivaju se pomoću funkcija rand() I mt_rand()). Svaki od ovih generatora povezan je s tri funkcije iste namjene: funkcijom postavljanja početne vrijednosti ( srand() I mt_srand()), sama funkcija za dobivanje slučajnog broja i funkcija koja uzorkuje najveći cijeli broj koji generator može vratiti (( getrandmax() I mt_getrandmax())). Funkcije getrandmax() i mt_getrandmax() vraćaju najveći broj koji može vratiti rand() ili mt_rand(), koji je ograničen na 32768 na Windows platformama.

Izbor specifične funkcije generisanja pseudoslučajnih brojeva koja se koristi u funkciji rand() može zavisiti od toga sa kojim bibliotekama je kompajliran PHP interpreter. Nasuprot tome, generator mt_rand() uvijek koristi istu funkciju generiranja pseudoslučajnih brojeva (mt je skraćenica od Mersenne Twister), a autor operativne dokumentacije za funkciju mt_rand() tvrdi da je i ova funkcija brža i "više random" (sa kriptografske tačke gledišta) nego rand(). Nemamo razloga da sumnjamo u istinitost ovih izjava, zbog čega radije koristimo funkciju mt_rand() nego rand().

Kada koristite neke verzije PHP-a na nekim platformama, čini se da funkcije rand() i mt_rand() proizvode naizgled prihvatljive nasumične brojeve, čak i bez prethodnog postavljanja sjemena. Ali takvom utisku ne treba vjerovati. Prvo, programi koji koriste funkcije za generiranje slučajnih brojeva bez specificiranja početne vrijednosti ne mogu se lako prenijeti na druge platforme, a drugo, pouzdan rad ovih funkcija bez specificiranja početne vrijednosti nije zajamčen.

Tipičan način za postavljanje početnih vrijednosti za bilo koji od PHP-ovih generatora slučajnih brojeva (koristeći funkciju mt_srand() ili srand()) je sljedeći:

PHP kod mt_srand((double)microtime()*1000000);

Ova izjava postavlja početnu vrijednost generatora, jednaku broju mikrosekundi koje su protekle do tog vremena od brojanja posljednje cijele sekunde. (Prebacivanje na dupliranje u ovoj izjavi je zapravo neophodno jer funkcija microtime() vraća string, koji se u operaciji množenja tretira kao cijeli broj, ali ne i u operaciji prosljeđivanja parametara funkciji.) Preporučujemo da čitač unese specificirani operator inicijalizacije čak i ako mu svrha ovog operatora nije sasvim jasna; Jednostavno postavljanje ove naredbe na svaku PHP stranicu, samo jednom, prije upotrebe odgovarajuće funkcije mt_rand() ili rand(), osigurat će da se početna tačka promijeni i stoga proizvede drugačiji slučajni niz svaki put.

Ovu konkretnu metodu postavljanja početne vrijednosti duboko su promislili oni stručnjaci koji u potpunosti razumiju sve nijanse generiranja pseudoslučajnih brojeva, stoga će, najvjerovatnije, zauvijek ostati bolji od bilo kojeg pokušaja bilo kojeg pojedinačnog programera da smisli nešto više "škakljivo".

Očigledno, ove funkcije za generiranje pseudo-slučajnih brojeva vraćaju samo cijele brojeve, ali slučajni cijeli broj iz datog raspona može se lako pretvoriti u odgovarajući broj s pomičnim zarezom (recimo, broj iz raspona od 0,0 do 1,0 uključujući) koristeći izraz kao što je rand () / getrandmax(). Navedeni raspon se zatim može skalirati i pomaknuti prema potrebi. Ispod je primjer:

PHP kod // Recimo da trebamo generirati nasumični broj od 100.0 do 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $random."
"; // Generiraj cijele brojeve (100 - 120); echo round($random);

Pokušajte nekoliko puta osvježiti stranicu s ovim kodom kako biste bili sigurni da su generirani nasumični brojevi.

Matematičke konstante

U PHP verziji 4.0, postojala je samo jedna matematička konstanta opisana u dokumentaciji - M_PI (vrijednost π, predstavljena kao broj s pomičnim zarezom dvostruke preciznosti). A počevši od PHP 4.0.2, uvedene su mnoge nove konstante. Većina ovih novih konstanti odnosi se na π (ili njegove višekratnike), e (ili njegove višekratnike) i kvadratne korijene; osim toga, neke konstante su pripadale drugim tipovima. Ali u narednim izdanjima, iz više razloga, lista konstanti je opet svedena na relativno mali broj unaprijed definiranih matematičkih konstanti:

PHP matematičke konstante
Konstantno Opis
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 e
M_SQRT2 sqrt(2)
M_SQRT1_2 1 / sqrt(2)
M_LOG2E log2(e)
M_LOG10E dnevnik(e)
M_LN2 loge(2)
M_LN10 loge(10)

Provjera formata broja

PHP jezik pruža brojne funkcije koje vam omogućavaju da provjerite ispravan prikaz brojeva. Iako PHP nema strogu provjeru tipova, preporučuje se da implementirate neke od ovih provjera u svoj kod kada je to potrebno kako biste mogli predvidjeti karakteristike rezultata koje dobijete i odabrati najbolji način za rukovanje njima.

Prva i najjednostavnija provjera je korištenje funkcije je_numeric(). Kao i kod većine drugih takvih testova, is_numeric funkcija vraća Boolean rezultat - istinit ako je parametar koji joj je proslijeđen numerički podatak bilo kojeg tipa (predpisan ili nepotpisan, cijeli broj ili pokretni zarez) ili matematički izraz koji vraća valjanu numeričku vrijednost.

Korištenje funkcija is_int() I is_float Možete odrediti da li je broj cijeli broj ili razlomak. Još dvije provjere su malo složenije: funkcije is_finite() I je_beskonačno() omogućavaju vam da izvršite tačno one testove koje njihova imena ukazuju (bilo da je broj konačan ili beskonačan). Ali striktno govoreći, raspon vrijednosti preko kojeg se ove funkcije protežu ne može uključivati ​​stvarnu beskonačnost (a može li se uopće provjeriti ima li broj beskonačno veliku vrijednost?). Umjesto toga, koriste se granice raspona vrijednosti s pomičnim zarezom koje su dozvoljene na određenom sistemu.

Ispod je primjer korištenja ovih funkcija:

PHP kod je_numerički(4); // istina is_numeric(25 - 6); // istina is_numeric("25"); // true is_numeric("25 - 6"); // false is_int(4); // istina is_int(4.2); // false is_int("4"); // false - ova provjera je stroža od provjere pomoću is_numeric() funkcije is_float(4); // false is_float(4.0); // istina is_float(M_PI); // istina

Konverzija brojevnih sistema

Podrazumevano, PHP koristi bazu 10 za pretvaranje numeričkih vrednosti iz eksterne u internu reprezentaciju unapred i unazad. Takođe možete reći PHP interpretatoru da eksterna reprezentacija koristi osmice sa bazom 8 (da biste to uradili, morate uneti početnu 0). ), ili heksadecimalni brojevi navedeni u bazi 16 (da biste to učinili, morate imati prefiks broja sa 0x).

Naravno, nakon konverzije brojeva iz eksterne reprezentacije u internu, oni se pohranjuju u memoriju u binarnom formatu, a svi osnovni aritmetički i matematički proračuni se izvode u samom operativnom sistemu u bazi 2. Osim toga, PHP jezik omogućava niz funkcija za pretvaranje brojeva iz jedne baze sistema brojanja u drugu. Pregled ovih karakteristika je dat u tabeli ispod:

Funkcije konverzije sistema brojeva
Funkcija Opis
BinDec() Uzima jedan parametar niza koji je binarni cijeli broj (osnovni broj 2) i vraća osnovnu 10 reprezentaciju niza tog broja
DecBin() Slično BinDec(), ali pretvara iz baze 10 u bazu 2
oktobar dec() Slično BinDec(), ali pretvara iz baze 8 u bazu 10
decembar() Slično BinDec(), ali pretvara iz baze 10 u bazu 8
HexDec() Slično BinDec(), ali pretvara iz baze 16 u bazu 10
DecHex() Slično BinDec(), ali pretvara iz baze 10 u bazu 16
base_convert() Uzima parametar niza (koji predstavlja cijeli broj koji se konvertuje) i dva cjelobrojna parametra (originalni i željeni radiks). Vraća string koji predstavlja konvertovani broj. U ovom redu, brojevi veći od 9 (10 do 35) su predstavljeni znakovima a-z. I originalna i željena baza moraju biti u rasponu od 2-36

Sve funkcije konverzije brojevnog sistema su funkcije posebne namjene koje pretvaraju brojeve iz jedne određene baze u drugu. Izuzetak je funkcija base_convert(), koja prihvata proizvoljne parametre koji ukazuju na početnu i rezultirajuću bazu.

Imajte na umu da sve funkcije konverzije brojevnog sistema prihvataju parametre niza i vraćaju vrijednosti niza, ali možete koristiti decimalne numeričke parametre i osloniti se na PHP interpreter da ispravno izvrši konverziju tipa. Drugim riječima, i DecBin("1234") i DecBin(1234) daju isti rezultat.

Eksponenti i logaritmi

PHP jezik uključuje standardne eksponencijalne i logaritamske funkcije u dvije varijante - za rad u bazi 10 i bazi e (koje su prikazane u tabeli).

PHP pruža funkciju exp() za podizanje e na datu potenciju, ali ne postoji funkcija s jednim parametrom za podizanje 10 na datu snagu, međutim, umjesto toga možete koristiti funkciju pow(), koja uzima dva parametra, dajući 10 kao prvi parametar.

Možete provjeriti da su eksponencijalne i logaritamske funkcije s istom bazom inverzne jedna drugoj provjeravanjem identiteta rezultata dobivenih na ovaj način:

PHP kod $test_449 = 449.0; $test_449 = pow(10, exp(log(log10($test_449)))); echo "test_449 = $test_449"; // test_449 = 449

Trigonometrijske funkcije

PHP jezik pruža standardni skup osnovnih trigonometrijskih funkcija, opšte informacije o kojima su date u tabeli:

Trigonometrijske funkcije
Funkcija Opis
pi() Ne uzima nikakve parametre i vraća približnu vrijednost π (3,1415926535898). Može se koristiti naizmjenično sa M_PI konstantom
grijeh() Prihvata numerički parametar u radijanima i vraća sinus parametra kao broj s pomičnim zarezom dvostruke preciznosti
cos() Uzima numerički parametar u radijanima i vraća kosinus parametra kao broj s pomičnim zarezom dvostruke preciznosti
preplanuli () Prihvata numerički parametar u radijanima i vraća tangent parametra kao broj s pomičnim zarezom dvostruke preciznosti
asin() Uzima numerički parametar i vraća arksinus parametra u radijanima. Unosi moraju biti između -1 i 1 (funkcija koja prima ulaze izvan ovog raspona rezultira NAN rezultatom). Rezultati se kreću od -π/2 do π/2
akos() Uzima numerički parametar i vraća arc kosinus parametra u radijanima. Unosi moraju biti u rasponu od -1 do 1 (funkcija koja prima ulaze izvan ovog raspona rezultira NAN rezultatom. Rezultati su u rasponu od 0 do π
atan() Uzima numerički parametar i vraća arktangens parametra u radijanima. Rezultati se kreću od -π/2 do π/2

Ispod je primjer sastavljanja tablice za izračunavanje trigonometrijskih funkcija za "standardne" kutove:

PHP kod function display_trigonometry($func_array, $input_array) ( // echo zaglavlja funkcije " "; ) echo ""; // Ispis ostatka tablice foreach($input_array kao $input) ( echo " "; foreach($func_array kao $func) ( echo " "; ) echo ""; ) echo "
Značenje/funkcija$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; ) display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Primjer korištenja trigonometrijskih funkcija u PHP-u

Razlog za dobivanje vrlo velikih (ali ne i beskonačnih) tangentnih vrijednosti je taj što bi nazivnici teoretski trebali biti nula, ali u stvarnosti se malo razlikuju od nule zbog grešaka zaokruživanja.

Izračunavanje proizvoljno preciznosti (koristeći BC funkcije)

Tipovi s pomičnim zarezom s cijelim brojem i dvostrukom preciznošću savršeno su prikladni za većinu matematičkih problema koji se susreću u web skriptiranju, ali svaka instanca vrijednosti predstavljene ovim tipovima zahtijeva fiksnu količinu računarske memorije, tako da veličina i preciznost predstavljanja brojeva ovih tipova neizbežno nameću ograničenja.

Naravno, tačni rasponi vrijednosti ovih tipova podataka mogu ovisiti o arhitekturi serverskog računala, ali cjelobrojne vrijednosti obično mogu biti u rasponu od -2 31 -1 do 2 31 -1, a brojevi s pomičnim zarezom dvostruke preciznosti mogu predstavljati brojeve sa preciznošću od oko 13 do 14 decimalnih cifara. S druge strane, za rješavanje problema koji zahtijevaju korištenje šireg raspona predstavljanja ili veće preciznosti, PHP pruža matematičke funkcije proizvoljne preciznosti(takođe se zovu BC funkcije, nazvane po uslužnom programu za proizvoljno precizno računanje zasnovano na Unixu).

Može biti da funkcije proizvoljne preciznosti nisu uključene u kompilaciju PHP interpretera, posebno ako je korisnik sam uradio kompilaciju, jer bi za to korisnik morao znati da je u fazi konfiguracije potrebno uključiti checkbox u parametri --enable-bcmath. Da biste provjerili jesu li navedene funkcije dostupne, pokušajte procijeniti izraz bcadd("1","1"). Ako dobijete poruku o grešci koja navodi nedefinisanu funkciju, moraćete ponovo da konfigurišete PHP interpreter i ponovo ga kompajlirate.

BC funkcije koriste nizove, a ne numeričke tipove fiksne dužine kao parametre i povratne vrijednosti. Pošto je u PHP-u dužina stringova ograničena samo količinom dostupne memorije, brojevi koji se koriste u proračunima mogu biti bilo koje dužine. Osnovni proračuni se rade u decimalnom obliku i vrlo su slični onima koje čovjek može raditi olovkom i papirom (ako može raditi vrlo brzo i biti strpljiv). BC cjelobrojne funkcije su precizne i omogućavaju vam da koristite onoliko cifara koliko je potrebno, dok funkcije s pomičnim zarezom izvode proračune tačno do određenog broja decimalnih mjesta. Opće informacije o BC funkcijama date su u donjoj tabeli:

Matematičke funkcije proizvoljne preciznosti (BC funkcije)
Funkcija Opis
bcadd() Prihvata dva parametra niza koji predstavljaju brojeve i opcijski cjelobrojni parametar koji ukazuje na faktor skaliranja. Vraća zbir prva dva parametra kao niz, s brojem decimalnih mjesta u rezultatu koji je određen parametrom koji pokazuje faktor razmjera. Ako parametar koji pokazuje faktor skaliranja nije specificiran, tada se koristi zadani faktor skaliranja
bcsub() Slično kao i bcadd(), samo što vraća rezultat oduzimanja drugog parametra od prvog
bcmui() Slično kao i bcadd(), samo što vraća rezultat množenja njegovih parametara
bcdiv() Slično kao i bcadd(), samo što vraća rezultat dijeljenja prvog parametra sa drugim
bcmod() Vraća modul (ostatak) dijeljenja prvog parametra sa drugim. Budući da je povratna vrijednost cijeli broj, funkcija ne prihvaća parametar koji ukazuje na faktor skaliranja
bcpow() Podiže prvi parametar na snagu specificiranu drugim parametrom. Broj decimalnih mjesta u rezultatu određen je faktorom skale, ako je jedan naveden
bcsqrt() Vraća kvadratni korijen parametra s brojem decimalnih mjesta određen vrijednošću opcionalnog faktora skaliranja
bcscale() Postavlja zadani faktor skaliranja za sljedeće pozive BC funkcije

Većina ovih funkcija kao posljednji parametar uzima opcijski faktor skaliranja (cijeli broj), koji određuje koliko decimalnih mjesta rezultat treba imati. Ako ovaj parametar nije specificiran, zadani faktor skaliranja koristi se kao faktor skaliranja, koji se zauzvrat može postaviti pozivanjem funkcije bcscale(). Zadana vrijednost za ovu zadanu vrijednost (to jest, vrijednost koja se koristi ako skripta ne poziva bcscale()) također se može postaviti u php.ini inicijalizacijskoj datoteci.

Ispod je primjer korištenja funkcije proizvoljne preciznosti za precizno izvođenje cjelobrojnih aritmetičkih operacija. Izvršavanje sljedećeg koda:

PHP kod za ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Precizno izračunavanje astronomskih veličina koristeći BC funkcije

Ako bi se za ove proračune koristio običan PHP tip cijelog broja, onda bi se prekoračenje cijelog broja dogodilo mnogo prije kraja izračunavanja, tako da bi ostatak petlje izvodio kalkulacije kako bi dobio približan broj s pomičnim zarezom.

Nizovi Obrada obrasca 1 2 3 4 5 6 7 8 9 10

Operacije sa PHP varijablama (operatorima)

Postoje različite grupe za implementaciju.

Operator je nešto što se sastoji od jedne ili više vrijednosti (izraza u programskom žargonu) što se može ocijeniti kao nova vrijednost (dakle, cijela konstrukcija se može smatrati izrazom). Iz toga slijedi da funkcije ili bilo koje druge konstrukcije koje vraćaju vrijednost (na primjer, print()) su operatori, za razliku od svih ostalih jezičkih konstrukcija (na primjer, echo()), koji ništa ne vraćaju.

Aritmetičke operacije u PHP-u

Sjećate li se školskih osnova aritmetike? Izjave u nastavku rade na isti način.

Operator dijeljenja ("/") uvijek vraća pravi tip, čak i ako su obje vrijednosti bile cijeli brojevi (ili nizovi koji se pretvaraju u cijele brojeve). U suprotnom, rezultat će biti razlomak.

Operacija izračunavanja ostatka dijeljenja" % " radi samo s cijelim brojevima, tako da njegova primjena na razlomke može dovesti do neželjenih rezultata.

Moguće je koristiti zagrade. Prednost određenih matematičkih operacija u odnosu na druge i promjena prioriteta kada se koriste zagrade u aritmetičkim izrazima slijede uobičajena pravila matematike.

Operacije povećanja i smanjenja

PHP, poput C, podržava prefiksne i postfiksne operatore inkrementa i dekrementa.

Postfiksni operatori inkrementa i dekrementa

Kao u C, ovi operatori povećavaju ili smanjuju vrijednost varijable, au izrazu vraćaju vrijednost varijable $a prije promjene. na primjer:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Štampa a=11, b=10

Kao što vidite, prvo varijabla $b vrijednost dodijeljena varijabli $a, a tek tada je zadnji povećan. Međutim, izraz čija je vrijednost dodijeljena varijabli $b, može biti teže - u svakom slučaju, povećanje $a desiće se tek nakon što se izračuna.

Operatori povećanja i dekrementa prefiksa

Postoje i operatori inkrementa i dekrementa, koji su specificirani radije nego iza imena varijable. Shodno tome, vraćaju vrijednost varijable nakon promjene. primjer:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Štampa a=9, b=9

U praksi se vrlo često koriste operacije povećanja i smanjenja. Na primjer, javljaju se u gotovo svakom ciklusu za .

echo "

Postfix inkrement

" ;
$a = 5;
echo "Trebalo bi biti 5: " . $a++ . "
\n" ;

\n" ;

Echo "

Prirast prefiksa

" ;
$a = 5;
echo "Mora biti 6: " . ++ $a . "
\n" ;
echo "Mora biti 6: " . $a . "
\n" ;

Echo "

Postfiksni dekrement

" ;
$a = 5;
echo "Trebalo bi biti 5: " . $a -- . "
\n" ;

\n" ;

Echo "

Dekrement prefiksa

" ;
$a = 5;
echo "Mora biti 4: " . -- $a . "
\n" ;
echo "Mora biti 4: " . $a . "
\n" ;
?>

Operacije sa stringovima

PHP ima dva operatora za rad sa stringovima. Prvi je operator konkatenacije ("."), koji vraća konkatenaciju lijevog i desnog argumenata. Drugi je operator dodjeljivanja sa konkatenacijom, koji dodaje desni argument lijevom. Dajemo konkretan primjer:

$a = "Zdravo" ;
$b = $a. "Svijet!" ; // $b sadrži string "Hello World!"

$a = "Zdravo" ;
$a .= "Svijet!" ; // $a sadrži string "Hello World!"
?>

Bitove operacije

Ove operacije su dizajnirane za rad (postavljanje/poništavanje/provjera) grupa bitova u cijeloj varijabli. Bitovi celog broja nisu ništa drugo do pojedinačne cifre istog broja zapisane u binarnom brojevnom sistemu. Na primjer, u binarnom sistemu broj 12 bi izgledao kao 1100, a 2 bi izgledao kao 10, pa bi izraz 12|2 će nam vratiti broj 14 (1110 u binarnoj notaciji). Ako varijabla nije cijeli broj, onda jeste
prvo se zaokružuje, a zatim se na njega primjenjuju sljedeći operatori.

Za predstavljanje jednog broja koriste se 32 bita:

  • 0000 0000 0000 0000 0000 0000 0000 0000 je nula;
  • 0000 0000 0000 0000 0000 0000 0000 0001 je 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 je 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 je 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 je 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 je 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 je 15;

Bitovi operatori:

Primjer Ime Rezultat
$a i $b Bitno "i" Postavljaju se samo oni bitovi koji su postavljeni u $a i $b.
$a | $b Bitno "ili" Oni bitovi koji su postavljeni u $a ili $b su postavljeni.
$a^$b Ekskluzivno ili Postavljaju se samo oni bitovi koji su postavljeni u samo $a ili samo u $b
~$a Negacija Oni bitovi koji nisu postavljeni u $a se postavljaju i obrnuto.
$a<< $b Shift lijevo Svi bitovi varijable $a su pomaknuti $b pozicija ulijevo (svaka pozicija implicira "množenje sa 2")
$a >> $b Shift desno Svi bitovi varijable $a su pomjereni na $b pozicije udesno (svaka pozicija podrazumijeva "podjelu sa 2")

Operacije poređenja

Operatori poređenja, kao što njihovo ime govori, omogućavaju vam da uporedite dve vrednosti.

Ovo su jedinstvene operacije na svoj način jer, bez obzira na tipove svojih argumenata, uvijek vraćaju jednu od dvije stvari: false ili istina. Operacije poređenja uspoređuju dvije vrijednosti jedna s drugom i, ako je uvjet istinit, vraćaju istina, a ako ne - false.

PHP dozvoljava samo poređenje skalarnih varijabli. Nizovi i objekti se ne mogu porediti u PHP-u. Ne mogu se čak ni porediti za jednakost (koristeći == operator), ali PHP ne izdaje upozorenje kada izvodi takvu operaciju. Dakle, kada smo se jednom zapitali zašto dva potpuno različita niza kada ih uporedimo koristeći == odjednom se ispostavi da su isti, zapamtite da se prije poređenja oba operanda konvertuju u riječ niz, koji se zatim upoređuje.

Pogledajte Poređenje nizova za detalje.

Operatori poređenja:

Primjer Ime Rezultat
$a == $b Jednako TRUE ako je $a jednako $b.
$a === $b Identično jednaki TRUE ako je $a jednako $b i ima isti tip. (Dodano u PHP 4)
$a != $b Nije jednako TRUE ako $a nije jednako $b.
$a<>$b Nije jednako TRUE ako $a nije jednako $b.
$a !== $b Identično nije jednako TRUE ako $a nije jednako $b ili ako su različitih tipova (dodato u PHP 4)
$a< $b Manje TRUE ako je $a striktno manje od $b.
$a > $b Više TRUE ako je $a striktno veće od $b.
$a<= $b Manje ili jednako TRUE ako je $a manje ili jednako $b.
$a >= $b Veće ili jednako TRUE ako je $a veće ili jednako $b.

Logičke operacije

Logički operatori su dizajnirani isključivo za rad s Booleovim izrazima i također za povratak false ili istina.

Evo tabele PHP logičkih operatora:

Treba napomenuti da se evaluacija logičkih izraza koji sadrže takve operatore uvijek odvija s lijeva na desno, a ako je rezultat već očigledan (npr. lažno&&nešto uvek daje false), tada se proračuni završavaju, čak i ako izraz sadrži pozive funkcija. Na primjer, u operatoru $logic = 0&&(time()>100); standardna funkcija vrijeme() nikada neće biti pozvan.

Budite oprezni s logičkim operacijama - ne zaboravite na udvostručavanje znakova. Imajte na umu da npr. | I || - dva potpuno različita operatera, od kojih jedan potencijalno može vratiti bilo koji broj, a drugi - samo false I istina.

Operatori povećanja (++) i dekrementa (--) ne rade s booleovim varijablama.

Operatori ekvivalencije

U PHP-u, počevši od PHP4, postoji identičan operator poređenja - trostruki znak jednakosti === ,
ili čekovnog operatera. PHP je prilično tolerantan na nizove koji se implicitno pretvaraju u brojeve, i obrnuto.
Na primjer, sljedeći kod će ispisati da su vrijednosti varijabli jednake:

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

I to uprkos činjenici da je varijabla $a predstavlja broj i $b- linija. Pogledajmo sada malo drugačiji primjer:

$a=0; // nula
$b=""; // prazan niz
if($a==$b) echo "a i b su jednaki"; // Štampa "a i b su jednaki"

Mada $a I $b očito nisu jednaki čak ni u uobičajenom smislu riječi, skripta će proglasiti da su isti. Zašto se ovo dešava? Poenta je da ako se jedan od operanada logičkog operatora može protumačiti kao broj, tada se oba operanda tretiraju kao brojevi. U ovom slučaju, prazan red se pretvara u 0 , koji se zatim poredi sa nulom. Nije iznenađujuće da operater echo radi.
Problem se rješava pomoću operatora ekvivalencije === (trostruka jednakost). Ne samo da uspoređuje dva izraza, već i njihove vrste. Prepišimo naš primjer koristeći ovaj operator.

Posljednje ažuriranje: 1.11.2015

U PHP-u možemo koristiti različite operatore: aritmetičke, logičke itd. Pogledajmo svaku vrstu operacije.

Aritmetičke operacije

    + (operacija sabiranja)

    Na primjer, $a + 5

    - (operacija oduzimanja)

    Na primjer, $a - 5

    * (množenje)

    Na primjer, $a * 5

    / (podjela)

    Na primjer, $a / 5

    % (dobija se ostatak dijeljenja)

    Na primjer: $a=12; eho $a % 5; // jednako 2

    ++ (povećaj/povećaj vrijednost za jedan)

    Na primjer, ++$a

    Važno je razumjeti razliku između izraza ++$a i $a++. na primjer:

    $a=12; $b=++$a; // $b je jednako 13 echo $b;

    Ovdje se prvo dodaje jedan vrijednosti varijable $a, a zatim se njegova vrijednost izjednačava sa promjenljivom $b. Bilo bi drugačije da izraz izgleda ovako: $b=$a++; . Ovdje je prvo vrijednost varijable $a bila jednaka varijabli $b, a zatim je povećana vrijednost varijable $a.

    -- (smanji/smanji vrijednost za jedan)

    Na primjer, --$a . I također, kao iu slučaju inkrementa, postoje dvije vrste snimanja: --$a i $a--

Operatori dodjele

    Izjednačava varijablu sa određenom vrijednošću: $a = 5

    Sabiranje praćeno dodjelom rezultata. Na primjer: $a=12; $a += 5; echo $a; // jednako 17

    Oduzimanje praćeno dodjeljivanjem rezultata. Na primjer: $a=12; $a -= 5; echo $a; // jednako 7

    Množenje praćeno dodjelom rezultata: $a=12; $a *= 5; echo $a; // jednako 60

    Dijeljenje praćeno dodjelom rezultata: $a=12; $a /= 5; echo $a; // jednako 2.4

    Spojite redove i dodijelite rezultat. Odnosi se na dvije linije. Ako varijable ne pohranjuju nizove, već, na primjer, brojeve, tada se njihove vrijednosti pretvaraju u nizove i tada se izvodi operacija: $a=12; $a .= 5; echo $a; // jednako 125 // identično sa $b="12"; $b .="5"; // jednako 125

    Dobivanje ostatka dijeljenja i zatim dodjeljivanje rezultata: $a=12; $a %= 5; echo $a; // jednako 2

Operacije poređenja

Operacije poređenja obično se koriste u uvjetnim konstrukcijama kada je potrebno uporediti dvije vrijednosti i, ovisno o rezultatu poređenja, izvršiti određene radnje. Dostupne su sljedeće operacije poređenja.

    Operator jednakosti uspoređuje dvije vrijednosti, i ako su jednake, vraća true, u suprotnom vraća false: $a == 5

    Operator identiteta također uspoređuje dvije vrijednosti, i ako su jednake, vraća true, inače vraća false: $a === 5

    Uspoređuje dvije vrijednosti, i ako nisu jednake, vraća true, u suprotnom vraća false: $a != 5

    Uspoređuje dvije vrijednosti, i ako nisu jednake, vraća true, u suprotnom vraća false: $a !== 5

    Uspoređuje dvije vrijednosti, i ako je prva veća od druge, onda vraća true, u suprotnom vraća false: $a > 5

    Uspoređuje dvije vrijednosti, i ako je prva manja od druge, onda vraća true, u suprotnom vraća false: $a< 5

    Uspoređuje dvije vrijednosti, i ako je prva veća ili jednaka drugoj, onda vraća true, u suprotnom vraća false: $a >= 5

    Uspoređuje dvije vrijednosti, i ako je prva manja ili jednaka drugoj, onda vraća true, u suprotnom vraća false: $a<= 5

Operator jednakosti i identiteta

Oba operatora uspoređuju dva izraza i vraćaju true ako su izrazi jednaki. Ali među njima postoje razlike. Ako operacija jednakosti uzima dvije vrijednosti različitih tipova, one se svode na jednu - onu koju interpretator smatra optimalnom. na primjer:

Očigledno, varijable pohranjuju različite vrijednosti različitih tipova. Ali kada se uporede, oni će se svesti na isti tip - numerički. I varijabla $a će se svesti na broj 22. I na kraju će obje varijable biti jednake.

Ili će, na primjer, sljedeće varijable također biti jednake:

$a = lažno; $b = 0;

Da bi se izbjegle takve situacije, koristi se operacija ekvivalencije, koja uzima u obzir ne samo vrijednost, već i tip varijable:

$a = "22a"; $b = 22; if($a===$b) echo "jednako"; inače eho "nije jednako";

Sada varijable neće biti jednake.

Operatori nejednakosti != i !== rade slično.

Logičke operacije

Logičke operacije se obično koriste za kombinovanje rezultata dve operacije poređenja. Na primjer, moramo izvršiti određenu radnju ako je nekoliko uslova istinito. Dostupne su sljedeće logičke operacije:

    Vraća true ako oba poređenja vraćaju true, u suprotnom vraća false: $a == 5 && $b = 6

    Slično operaciji &&: $a == 5 i $b > 6

    Vraća true ako barem jedna operacija poređenja vraća true, u suprotnom vraća false: $a == 5 || $b = 6

    Slično operaciji || : $a< 5 or $b > 6

    Vraća true ako operacija poređenja vrati false: !($a >= 5)

    Vraća true ako je samo jedna od vrijednosti istinita. Ako su oba tačna ili nijedno nije tačno, vraća netačno. Na primjer: $a=12; $b=6; if($a xor $b) echo "true"; else echo "lažno";

    Ovdje će rezultat logičke operacije biti lažan jer obje varijable imaju specifičnu vrijednost. Promijenimo kod:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else echo "lažno";

    Ovdje će rezultat već biti istinit, jer vrijednost jedne varijable nije postavljena. Ako varijabla ima vrijednost NULL, tada će se u logičkim operacijama njena vrijednost tretirati kao lažna

Bitne operacije

Bitne operacije se izvode na pojedinačnim bitovima broja. Brojevi se razmatraju u binarnom prikazu, na primjer, 2 u binarnom predstavljanju je 010, broj 7 je 111.

    & (logičko množenje)

    Množenje se vrši po bitovima, a ako oba operanda imaju bitne vrijednosti jednake 1, tada operacija vraća 1, u suprotnom se vraća broj 0, na primjer: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // jednako 4

    Ovdje je broj 4 u binarnom sistemu jednak 100, a broj 5 jednak 101. Pomnožite brojeve po bitovima i dobijete (1*1, 0*0, 0 *1) = 100, odnosno broj 4 u decimalnom formatu.

    | (logičan dodatak)

    Slično logičkom množenju, operacija se također izvodi nad binarnim znamenkama, ali sada se vraća jedan ako barem jedan broj u datoj znamenki ima jedan. Na primjer: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // jednako 5

    ~ (logička negacija)

    invertuje sve bitove: ako je vrijednost bita 1, tada postaje nula, i obrnuto.

    $b = 5; echo ~$b;<

    x

x>>y - pomiče broj x udesno za y znamenke. Na primjer, 16>>1 pomiče broj 16 (koji je 10000 u binarnom obliku) za jedno mjesto udesno, tako da je rezultat 1000 ili broj 8 u decimalnom obliku

Povezivanje nizova

Operator točka se koristi za spajanje nizova. Na primjer, spojimo nekoliko linija:

$a="Zdravo,"; $b=" svijet"; echo $a . $b . "!";

Ako varijable predstavljaju druge tipove osim stringova, kao što su brojevi, tada se njihove vrijednosti pretvaraju u nizove i tada se također javlja operacija spajanja nizova.

Sve osnovne matematičke operacije dostupne su u PHP-u. I cijeli i realni brojevi mogu se koristiti kao operandi.:
Tabela prikazuje listu aritmetičkih operatoraOperaterOpis
Potpiši + Dodatak
Sabiranje dvije vrijednosti - Oduzimanje
Oduzimanje jedne vrijednosti od druge * Množenje
Množenje dvije vrijednosti / Division
Dijeljenje jedne vrijednosti drugom % Dobivanje ostatka divizije
Dijeljenje jedne vrijednosti drugom i vraćanje ostatka (modulo dijeljenje) ++ Povećanje
Skraćenica za povećanje broja za jedan -- Dekrement
Skraćenica za smanjenje broja za jedan - Unarna negacija

Pretvaranje pozitivnog broja u negativan ili negativnog broja u pozitivan

Operatori oduzimanja, množenja, dijeljenja, modula i sabiranja

Operatori oduzimanja, množenja, dijeljenja, modula i sabiranja koriste se na isti način kao u matematici. Ovdje vrijedi obratiti pažnju na operatore podjele i modula.

Operator dijeljenja (" / ") vraća broj s pomičnim zarezom, osim ako obje vrijednosti nisu cijeli brojevi (ili nizovi koji se pretvaraju u cijele brojeve) koji su podijeljeni cijelim brojem, u kom slučaju vraća cjelobrojnu vrijednost.
rezultat2 = $rezultat2
"; echo "rezultat3 = $rezultat3

U modulo dijeljenju, operandi se pretvaraju u cijele brojeve (sa uklonjenim razlomkom) prije početka operacije. Rezultat operacije ostatka dijeljenja % imat će isti predznak kao i dividenda:

Unarna negacija

Uniarni operator negacije označen je znakom "-", i on obrće značenje svog jedinog operanda:

U ovom slučaju zagrade nisu potrebne jer unarna negacija ima najveći prioritet, ali pomažu u organiziranju koda tako da je jasno da se dodaju brojevi -5 i 4.

Povećanje

Operator inkrementa je označen znakom ++ i može se postaviti na bilo koju stranu operanda na kojem radi. Povećava ovu vrijednost za jedan, baš kao dodavanje jedan vrijednosti. Stvarni rezultat zavisi od toga da li je operator primenjen pre ili posle operanda sa kojim je primenjen. Ovaj operator se često koristi sa varijablama, a često se to dešava unutar petlji (o petljama će biti reči kasnije).

Prefiksni oblik priraštaja

Forma prefiksa- ovo je kada se operator inkrementa stavi ispred operanda, ovaj oblik zapisa znači da će se inkrement prvo izvršiti: povećava vrijednost operanda za jedan i tek onda se izvršava ostatak instrukcije:

Postfiksni oblik inkrementa

Postfix formular je napisano malo drugačije - inkrement se u ovom slučaju nalazi iza operanda. U postfiksnom zapisu, prva upotreba operanda vraća njegovu trenutnu vrijednost, tek nakon toga vrijednost će biti povećana za jedan:

Dekrement

Operator dekrementa je označen znakom --, i za razliku od operatora inkrementa, on smanjuje, a ne povećava, vrednost svog operanda za jedan. Dekrement takođe dozvoljava prefiksnu i postfiksnu notaciju:

Logičke operacije postoje u svim programskim jezicima i PHP nije izuzetak. Pored jednostavnog dijeljenja, množenja, sabiranja ili oduzimanja, postoje i dijeljenja cijelih brojeva i ostataka, o kojima ćemo sada govoriti i analizirati ih na detaljnim primjerima.

Cjelobrojno dijeljenje je rezultat cijelog broja iz dijeljenja. Na primjer, ako podijelimo 5 sa 2, dobićemo 2, a ne 2,5.

Sa rezidualnom podjelom sve je drugačije. Ovo je rezultat ostatka kada se podijeli cijelim brojem. Na primjer, ako podijelite istih pet, dobit ćete ne 2, već 1, jer ako podijelite 5 sa 2, dobijamo 2, a ostatak je 1.

Kako napraviti dijeljenje cijelih brojeva u PHP-u

Na primjer, u Pythonu ova podjela se vrši pomoću jednostavnog operatora: "//".

A u PHP-u to neće biti tako lako, ali ipak proces ne zahtijeva super poznavanje jezika.

Dajemo primjer kako se to može implementirati.

U PHP verziji sedam, funkcija izgleda ovako:

U starijoj verziji ista funkcija izgleda ovako:

Postoji i metoda za sve verzije:

Kako se prijaviti?

Na primjer, uzmimo prvu funkciju, sve ostale se izvode na približno isti način.

$rezultat = intdiv(10, 3); echo $result;

Ostatak podjele u PHP-u

Da biste prikazali celobrojni ostatak podele u PHP-u, jednostavno koristite operator "%".

$i = 10% 3; echo $i;

Kao što vidimo, sve je prilično jednostavno i ne zahtijeva duga objašnjenja.

Gdje se može koristiti?

Poznavanje dijeljenja cijelih brojeva u PHP-u će biti vrlo korisno ako trebate uporediti dva broja, napraviti obrnuti broj (popularna vježba) ili, na primjer, program pod nazivom FizzBuzz. Njegova suština je da morate napisati ciklus od 1 do 100, koji svaki broj dijeli sa 3 i 5. Ako broj podijeljen sa 3 ima ostatak 0, tada pišemo Fizz, ako je podijeljen sa 5, zatim Buzz i ako je , dijeleći i 5 i 3, ostatak 0, tada pišemo FizzBuzz. Ovo je vrlo popularan zadatak intervjua. Ako ste ga sami završili, možete biti ponosni na sebe.

Ili, na primjer, sve njegove brojeve (4, 5, 2) moramo izvesti iz broja 452.

Zaključak

Naravno, podjele cijelih brojeva i ostataka su korisne i prilično uobičajene za korištenje kao u Pythonu, ali su ipak važne.

Sada ste korak bliže učenju PHP programskog jezika, a u budućnosti ćete se još više približiti ako budete jednako naporno radili na prevazilaženju izazova.