Operatori za poređenje su aspekt PHP-a koji je često zanemaren, što može dovesti do nekih neočekivanih rezultata.
Jedan takav problem proističe iz striktnog poređenja (poređenje bool vrednosti u vidu integer-a).
Prilikom korišćenja ‘if/else’ izraza u nekoj funkciji ili klasi, postoji zabluda da ‘else’ uvek mora biti
napisan kako bi se pokrili svi potencijalni slučajevi. Ako je ishod zapravo definisanje povratne vrednosti,
‘else’ nije neophodan, jer će ‘return’ izaći iz funkcije, što ‘else’ čini suvišnim.
Pri korišćenju namespace-ova, možda ste naišli na situaciju da su neke interne funkcije “pregažene” funkcijama koje ste vi napisali.
Kako biste to rešili, globalnu funkciju pozivajte sa backslash karakterom () pre njenog imena.
Stringovi su zapravo serija karaktera, što zvuči dosta jednostavno. Pritom, postoji nekolicina različitih tipova
stringova, koji imaju vrlo male razlike u sintaksi, ali i male razlike u ponašanju.
Jednostruki navodnici
Jednostruki navodnici se koriste za “bukvalne/literalne stringove”. Ovi stringovi ne rade parsiranje specijalnih
znakova i promenljivih.
Ako prilikom korišćenja jednostrukih navodnika unesete ime promenljive u sâm string, na primer: 'neka $stvar',
dobili biste isti takav ispis: neka $stvar. U slučaju dvostrukih navodnika, parser bi pokušao da evaluira
promenljivu $stvar i prikazao greške ako ona ne postoji.
Dvostruki navodnici predstavljaju pravi “švajcarski vojnički nož” u kontekstu stringova. Oni ne samo da će da parsiraju
promenljive pomenute u prethodnom delu, ali i mnoge druge specijalne znakove, kao što su \n za novi red, \t za tab, itd.
Dvostruki navodnici mogu da sadrže promenljive, a to se naziva “interpolacija”.
Pri korišćenju interpolacije, često se dešava da promenljiva “dodiruje” neki drugi karakter u stringu. Ovo će
za rezultat imati konflikt u smislu razlikovanja imena promenljive od samog karaktera.
U cilju prevazilaženja ovog problema, potrebno je uokviriti promenljivu sa vitičastim zagradama.
Nowdoc sintaksa je predstavljena u verziji 5.3 i interno radi na isti način kao jednostruki navodnici, pri čemu je
prevashodno namenjena za pisanje stringova u više redova bez potrebe za konkatenacijom.
Heredoc sintaksa interno radi na isti način kao dvostruki navodnici, pri čemu je prevashodno namenjena
za pisanje stringova u više redova bez potrebe za konkatenacijom.
Postoji mit o tome da su jednostruki navodnici nešto brži od dvostrukih, a to u osnovi nije tačno.
Ako definišete string i pritom nemate konkatenaciju vrednosti, onda će stringovi sa jednostrukim i dvostrukim
navodnicima biti u potpunosti isti. Oba rešenja će biti podjednako brza.
Ako vršite konkatenaciju više stringova ili vršite interpolaciju promenljivih u string sa dvostrukim navodnicima,
onda se rezultati mogu razlikovati. Ako radite sa malim brojem promenljivih, konkatenacija će biti neznatno brža.
A u slučaju dosta promenljivih, interpolacija će biti nešto brža.
Nezavisno od toga šta radite sa stringovima, nijedan od ova dva tipa neće imati značajan uticaj na vašu aplikaciju.
Pokušaj prepravke kôda sa ciljem korišćenja jednog ili drugog tipa je uzaludan posao, tako da izbegavajte te
mikro-optimizacije osim ako zaista razumete značenje i uticaj njihov razlika.
Ternarni operatori predstavljaju odličan način za uštedu kôda, ali programeri često preteruju u njihovom korišćenju.
Iako ternarni operatori mogu biti ugnježdeni, preporuka je da se pišu u istoj liniji radi preglednosti.
Nasuprot ovome, sledi primer koji kompromituje sve vidove preglednosti u cilju smanjenja broja linija kôda:
Za povratnu vrednost u slučaju ternarnih operatora koristite ispravnu sintaksu:
Treba pomenuti i to da nema potrebe da koristite ternarni operator u slučaju vraćanja bool vrednosti.
Na primer:
Ovo važi i za sve druge operacije (===, !==, !=, ==, itd.).
Korišćenje zagrada sa ternarnim operatorima za formatiranje i funkcionalnost
Pri korišćenju ternarnog operatora, zagrade mogu biti značajne u cilju poboljšanja preglednosti, ali i
stvaranja unija u okviru blokova izraza. Primer u kojem zagrade nisu neophodne:
Zagrade takođe nude mogućnost stvaranja unija u okviru blokova izraza, pri čemu se blok proverava u celosti.
To možemo videti u sledećem primeru koji će vratiti true ako su oba uslova ($a == 3 i $b == 4) ispunjena i
ako je $c == 5 takođe tačno.
Još jedan primer je sledeći kôd koji vraća true ako je ($a != 3 i $b != 4) ili je $c == 5:
Od PHP verzije 5.3 moguće je izostaviti središnji deo ternarnog operatora.
Izraz “expr1 ?: expr3” vraća expr1 ako je on true ili expr3 u suprotnom.
Programeri ponekad pokušavaju da učine kôd “čistijim” tako što će deklarisati neke promenljive određenim imenima.
To rezultuje povećanjem memorije koje će potrošiti neka skripta. Primera radi, ako imamo neki string veličine
1MB, upisivanjem istog u neku promenljivu biste povećali korišćenje memorije na 2MB: