Funkcije s parametrima, dinamički pozivi, izrada funkcije u PHP-u. Pozivanje funkcija putem Php varijabli kada možete pozvati uvjetno definirane funkcije

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Tako, što je funkcija?PHP?

funkcija - Ovo je mini-program koji izvodi neke korisne radnje i daje gotov rezultat.
Pogledajmo dijagram:

Pokušajmo napisati mini program koristeći gotov predložak funkcije.
Spremni predložak funkcije:

Recimo da trebamo napisati funkciju koja može izračunati zbroj brojeva 5 i 2. Gledamo predložak i pišemo:

Analizirajmo kod.
funkcija suma() je funkcija imena suma;
odjek 5 + 2; - u tijelu funkcije naveli smo da brojeve 5 i 2 treba zbrojiti (5 + 2);
suma(); - poziv funkcije. Pozvati funkciju znači izvršiti je. Odnosno, problem 5 + 2 mora biti dovršen i dati rezultat 7.

Pokušajmo sada pogledati funkcije korak po korak.

Faze kreiranja funkcije u PHP-u

Pozornicaja. Stvaranje funkcije
Zapamtite gotov predložak funkcije:

Ovako se stvara funkcija u PHP-u.
Napišimo tekst" Drago mi je što te vidim na blogu».
Samo ne zaboravite: tekst pišemo pomoću .

"; } ?>

Sada trebate pozvati funkciju “site()”.

PozornicaII. Pozivanje spremne funkcije uključenoPHP
Funkcija je stvorena i sada se mora izvršiti. Da biste izvršili i prikazali funkciju, samo navedite “naziv funkcije(); »

web stranica();

Izgledat će ovako:

PHP funkcije - web stranica "; ) site(); ?>

Možete to učiniti ovako:

PHP funkcije - web stranica "; ) ?> Puno teksta…..Puno teksta.....

Unesite adresu u svoj preglednik:

Proizlaziti:

PHP funkcije s argumentima

Svi gornji primjeri s funkcijama bili su bez argumenata. Objasnit ću vam što je argument u kodu:

Stoga sam stvorio funkciju pod nazivom "site". U parametrima (gdje su zagrade) napisao sam dvije varijable $a i $b odvojene zarezima.

Funkcijsko mjesto ($a, $b)

$a i $b su dva argumenta.
echo "$a + $b = "; – ovdje sam prikazao tekst na monitoru. Rezultat: 5 + 5 =
odjek $a + $b; – ovdje sam naznačio funkciji da varijable $a i $b treba zbrojiti.
mjesto (15, 5); – nazvana funkcija. Pažnja: u zagradama sam označio dva argumenta (15, 5) koje čekaju varijable $a i $b. Varijabla $a će dobiti prvi argument - 15 , $b - drugi 5 .

Za one koji ne razumiju gdje se argument zamjenjuje i kojim redoslijedom, evo dijagrama:

Dakle, gotov kod:

Spremite kao "function.php" u mapu "test-1" lokalnog poslužitelja (pogledajte lekciju 1).

Unesite adresu u svoj preglednik:

https://localhost/test-1/function.php

Proizlaziti:

Dopustite mi da malo zakompliciram funkciju i učinim je zanimljivijom. Argumentu ću dodati adresu bloga i napisati naziv poveznice.

Funkcija pod nazivom “site” primit će argument https://site/ u varijabli $link, a varijabla $title primit će tekst veze - “ Blog stranica – izrada web stranice!»

Gotov kod:

Spremite kao "function.php" u mapu "test-1" lokalnog poslužitelja (pogledajte lekciju 1).

Unesite adresu u svoj preglednik.

Funkcija je imenovani blok koda, u ovom slučaju u PHP-u, koji je definiran jednom i zatim se može pozvati na izvršenje koliko god puta želite.

Funkcija je definirana pomoću ključne riječi function iza koje slijede sljedeće komponente:

  • Identifikator koji navodi naziv funkcije. Koristit će se za stvaranje nove varijable kojoj će se funkcija dodijeliti. Nazivi funkcija slijede ista pravila kao i imenovanja varijabli.

    Napomena: Nazivi funkcija ne razlikuju velika i mala slova.

  • Par zagrada oko popisa od nula ili više identifikatora, odvojenih zarezima. Ovi identifikatori će definirati nazive parametara funkcije. Koriste se kao lokalne varijable u tijelu funkcije.
  • Par vitičastih zagrada s nula ili više uputa. Ove instrukcije čine tijelo funkcije: one se izvršavaju svaki put kad se funkcija pozove.

Sintaksa za definiciju funkcije je sljedeća:

Funkcija naziv_funkcije([parametri]) ( blok koda )

Uglate zagrade () označavaju izbor. Dajmo sada jednostavan primjer definicije funkcije:

Za pozivanje funkcije koristi se operator poziva koji je par zagrada. Poziv funkcije, kao i sve upute, završava točkom i zarezom (;):

Kada se funkcija pozove, izvršavaju se instrukcije koje se nalaze u njenom tijelu.

Funkcije se mogu definirati bilo gdje u programu, što znači da ne moraju biti definirane prije upotrebe. isključujući slučaj kada su funkcije definirane uvjetno:

Sve funkcije u PHP-u imaju globalni opseg- mogu se pozvati izvan funkcije, čak i ako su definirane unutar i obrnuto:

Najčešće funkcije rade s bilo kojim vrijednostima koje su im proslijeđene. Da bi funkcija mogla proslijediti neke vrijednosti, mora sadržavati parametre. Ovi parametri su u biti obične varijable koje se inicijaliziraju s vrijednostima proslijeđenim kada se funkcija pozove.

Napomena: Aktivirana je adaptivna verzija stranice koja se automatski prilagođava maloj veličini vašeg preglednika i skriva neke detalje stranice radi lakšeg čitanja. Uživajte u gledanju!

Dobar dan svima. S današnjim člankom nastavljamo zaranjati u dubine PHP-a, ali ne samo to. Na kraju ovog članka pronaći ćete križaljku čijim rješavanjem možete dobiti od 500 do 1500 rubalja Sve detalje, a mi nastavljamo učiti.

Što je funkcija?

Funkcija je dio koda koji se može više puta izvršavati na različitim mjestima u PHP skripti (naša stranica).

Sintaksa:

Funkcija siteOn())( // tijelo funkcije echo "Pozdrav svim čitateljima stranice na blogu!"; )

Gdje siteOn– ovo je proizvoljan naziv funkcije, ne razlikuje velika i mala slova. Funkcija u gornjem primjeru ispisuje navedeni tekst. Kada PHP interpreter obrađuje kod, vidi samo deklaraciju funkcije, bez njenog tijela, i naravno ne izvršava je. Tijelo funkcije pohranjuje se u memoriju dok PHP skripta ne završi, odnosno dok se stranica ne učita.

Nakon što napišemo funkciju, naš zadatak je pozvati je na mjestima koja su nam potrebna. Evo kako se to radi:

"; ) siteOn(); // pozivanje funkcije siteOn(); // pozivanje funkcije siteOn(); // pozivanje funkcije ?>

U gornjem primjeru pozvali smo funkciju 3 puta, a evo rezultata:

Zašto su potrebne funkcije?

Čini se, dobro, funkcija, pa što? Mogli bismo jednostavno napisati ovaj redak 3 puta bez funkcije. Mogli bismo, ali ako odjednom želimo promijeniti nešto u ovom fragmentu, onda ćemo to morati promijeniti samo na jednom mjestu, a ne na tri. Ali to nije sve! Sada smo razmotrili jednostavnu opciju, kada je sve u blizini i u jednoj datoteci. U stvarnom životu, datoteka može sadržavati tisuće redaka, a oni mogu biti kaotično razbacani po datoteci.

Jedna je stvar ući i promijeniti sve u jednoj funkciji, a druga je stvar promijeniti je na 10 mjesta i čak pretraživati ​​cijelu datoteku. Ali to nije sve! Web stranice se ne sastoje od jedne datoteke; mogli bismo trebati dio koda u desecima različitih datoteka i morali bismo dugo tražiti sva ponavljanja ovog koda. Zahvaljujući funkcijama, znamo da, na primjer, sve funkcije pohranjujemo u tu i tu datoteku, otići ću tamo i promijeniti je jednom.

To jest, možete uzeti sljedeće pravilo: ako se bilo koji dio koda ponavlja, svakako napravite funkciju od toga!

Provjera postojanja

U PHP-u ne možete deklarirati istu funkciju dva puta. Na primjer, ako napišete:

// bilo koji kod ili bez njega) funkcija siteOn() ( // bilo koji kod ili bez njega } ?>

Tada dobivamo sljedeću grešku. Usput, zapamtite sve tipične pogreške:

Nije moguće ponovno deklarirati siteOn() (prethodno deklariran u Z:\home\custom\www\index.php:3) u Z:\home\custom\www\index.php na retku 9

Ova pogreška ukazuje na to da smo već deklarirali takvu funkciju i čak pokazuje u kojoj datoteci i retku smo to već učinili. Imajte na umu da PHP ima nekoliko tisuća ugrađenih funkcija, tako da se ova situacija lako može pojaviti u vašem razvoju.

Da biste saznali postoji li takva funkcija već ili ne, možete koristiti ugrađenu funkciju function_exists(). Primjer:

// bilo koji kod ili bez njega) if(function_exists("siteOn"))( echo "Ova funkcija već postoji!"; ) ?>

Proizlaziti:

Osobno nikada ne koristim ovu značajku, ali trebali biste znati za nju.

Argumenti funkcije

Argument funkcije također se može nazvati njezinim parametrom. Ovako izgleda:

U gornjem primjeru, argument funkcije je varijabla $autor. Kako se može koristiti? Kada pozivamo funkcije, unutar njih možemo proslijediti vrijednost argumenta. To našim funkcijama daje neviđenu fleksibilnost i dinamiku:

"; ) siteOn("Sergey"); // prva metoda $name = "Andrey"; // druga metoda siteOn($name); siteOn(); // ne šalji ništa ?>

Proizlaziti:

Kao što vidite, kada nismo prošli argument, dobili smo pogrešku poput Upozorenje, nakon čega je ipak nastavljeno izvršavanje naše PHP skripte. Opet, greška sadrži vrlo detaljne informacije o tome gdje se sve to dogodilo. Upozorenje je ozbiljna greška i ne može se zanemariti.

Funkcija može imati bilo koji broj argumenata, na primjer:

"; ) siteOn("Sergey", "Site on!"); // prva metoda $name = "Andrey"; // druga metoda siteOn($name, "Sladokusac"); siteOn("Fjodor Ivanov"); // prošao samo 1 argument ?>

Proizlaziti:

Nestandardni pozivi funkcija

Nekoliko suptilnosti. Nitko obično ne koristi sljedeću metodu pozivanja funkcija, a ni vama ne savjetujem da to radite, ali trebali biste to znati. Pogledajmo:

"; ) $text = "siteOn"; // stavite naziv funkcije u varijablu$text("Sergey", "Site on!"); // poziv funkcije preko varijable ?>

Rezultat će biti kao i obično:

Praktičan primjer korištenja funkcija

Sjećate li se tablice množenja iz prethodne? Tu imamo 2 parametra: broj linija I broj stupaca, koje postavljamo u varijablama. Vrijeme je da od tog koda napravimo cijelu funkciju koja će uzeti dvije gornje vrijednosti!

Sav kod iz prethodne lekcije ostavit ću nepromijenjen, osim što sada više ne moramo postavljati broj redaka i stupaca u njemu, to ćemo učiniti prilikom poziva funkcije:

// komentirao je ova 2 retka, budući da se količina sada prosljeđuje prilikom poziva funkcije // $redova = 20; // broj redaka, tr // $cols = 20; // broj stupaca, td$tablica = "

"; za ($tr=1; $tr<=$rows; $tr++){ $table .= ""; za ($td=1; $td<=$cols; $td++){ if ($tr===1 or $td===1){ $table .= ""; )else( $table .= " "; ) ) $tablica .= ""; ) $tablica .= "
". $tr*$td ."". $tr*$td ."
"; echo $table; ) getTable(3,3); // prikaz tablice množenja 3 puta 3 getTable(5,5); // prikaz tablice množenja 5 x 5 getTable(10,10); // prikaz tablice množenja 10 x 10 ?>

Proizlaziti:

Zadani argumenti

Prilikom izrade funkcije proizvoljnim argumentima možemo dodijeliti zadane vrijednosti. Argumenti koji imaju zadane vrijednosti mogu se izostaviti prilikom pozivanja funkcije i to neće biti pogreška. Jer umjesto argumenta koji nedostaje, funkcija će automatski zamijeniti zadanu vrijednost. Primjer:

"; ) siteOn("Sergey"); ?>

U ovom primjeru argumentiramo $blog dodijeljena zadana vrijednost Stranica uključena! Zatim su pozvali funkciju sa samo jednim argumentom, a drugi je koristio svoju zadanu vrijednost.

Proizlaziti:

default argumenti se uvijek pišu zadnji.

Drugim riječima: potrebni argumenti (bez zadane vrijednosti) trebaju biti prvi slijeva nadesno, a zatim argumenti koji imaju zadanu vrijednost.

Trag:
Da biste dobili potpuni popis ugrađenih PHP funkcija, u desnom stupcu kliknite gumb Traži kada je traka za pretraživanje "PHP pretraga" prazna.
Ako želite saznati više detalja opis s konkretnim primjerom PHP funkcije navedite ga u PHP retku za pretraživanje. →

Postoje dva glavna oblika funkcija u PHP-u: ugrađene i korisnički definirane.

Ključna riječ koristi se za definiranje prilagođene funkcije funkcija.

Primjer 1

Definiranje i pozivanje funkcije $str"; ) naslov ("Dio", 1); naslov ("Poglavlje", 2); naslov ("Odjeljak", 3); ?>

Od PHP 4.0, možete koristiti zadane vrijednosti argumenata.

Primjer 2

Funkcija sa zadanom vrijednošću argumenta $str"; ) naslov ("Dio", 1); naslov ("Poglavlje"); naslov ("Odjeljak", 3); ?>

REZULTAT PRIMJERA 1-2:

Poglavlje

Poglavlje

Bilješka: Kôd u nastavku neće raditi kako biste očekivali. Varijabla $full bit će istinita u svim slučajevima.

Fun($ar, false); funkcija fun($row, $full = true)( ... )

Prosljeđivanje argumenta prema referenci

Primjer 3

Prosljeđivanje argumenta prema referenci Nakon poziva funkcije:
"; echo "af = $af; bf = $bf"; ?>

REZULTAT PRIMJERA 3:

Af = 10; bf = 6 Nakon poziva funkcije: af = 16; bf = 6

Povratne vrijednosti

Za vraćanje vrijednosti iz funkcije upotrijebite operator povratak. Možete vratiti više vrijednosti ako primijenite popis popis().

Primjer 4

Funkcija koja vraća popis vrijednosti popis($prezime, $ime, $srednje ime) = puno ime(); jeka " "; jeka "
prezime: $prezime"; echo "
Ime: $name"; echo "
prezime: $srednje ime
"; ?>

REZULTAT PRIMJERA 4:

Dinamičke funkcije

U PHP-u možete koristiti dinamičke funkcije. To znači da ako se varijabli da naziv funkcije, tada se ta varijabla može tretirati na potpuno isti način kao i sama funkcija.

Primjer 5

Funkcijske varijable "; ) function funct2 () ( echo "Mi smo unutar funkcije funct2();
"; ) $myfunct = "funct1"; $myfunct(); $myfunct = "funct2"; $myfunct(); ?>

REZULTAT PRIMJERA 5:

Nalazimo se unutar funkcije funct1(); Nalazimo se unutar funkcije funct2();

Globalne varijable

Kako bi varijabla stvorena izvan funkcije bila dostupna unutar funkcije, morate je deklarirati globalnom pomoću izjave globalno.

Primjer 6

Pristup globalnoj varijabli

REZULTAT PRIMJERA 6:

Globalna varijabla ima vrijednost - 45

Statičke varijable

Kako bi varijabla zadržala svoju vrijednost između poziva funkcije, morate je deklarirati kao statičnu pomoću izjave statički.

Primjer 7

Spremanje vrijednosti varijable između poziva funkcije $ss. $str"; ) funct ("ponedjeljak"); echo "Kralj je šetao parkom"; funct ("utorak"); echo "Kralj je bio u lovu"; ?>

Varijabla $ss je kreirana i inicijalizirana. Ova će varijabla ostati lokalna za funkciju funct(). Pri drugom i narednim pozivima funkcije funct(), inicijalizacija se zanemaruje i zadnja dodijeljena vrijednost se pamti.

REZULTAT PRIMJERA 7:

1. ponedjeljak

Kralj je šetao parkom

2. utorak

Kralj je bio u lovu


Pročitajte više: Stringovi u PHP-u

Koliko god koristili PHP, i dalje se pojavljuju neke funkcije za koje nismo niti čuli. Neki od njih bili bi nam vrlo korisni. Napravio sam mali popis korisnih funkcija koje bi trebale biti u arsenalu svakog PHP programera.

1. Kreiranje funkcija s promjenjivim brojem argumenata

Vjerojatno već znate da nam PHP omogućuje stvaranje funkcija s neobaveznim argumentima. Sada ću pokazati funkciju u kojoj broj argumenata može varirati od slučaja do slučaja.

Ali prvo se prisjetimo kako stvaramo funkcije na uobičajeni način:

// funkcija s dva opcijska parametra function foo($arg1 = "", $arg2 = "") ( echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; ) foo("zdravo", "svijet"); /* će ispisati: arg1: hello arg2: svijet */ foo(); /* će ispisati: arg1: arg2: */

Sada pogledajmo kako možete napisati funkciju s neograničenim brojem argumenata. Za to će se koristiti metoda func_get_args():

// ne navedite argumente function foo() ( // vraća niz proslijeđenih argumenata $args = func_get_args(); foreach ($args as $k => $v) ( echo "arg".($k+1) ." : $v\n"; ) ) foo(); /* neće ništa ispisati */ foo("zdravo"); /* će ispisati arg1: zdravo */ foo("zdravo", "svijet", "opet"); /* ispisat će arg1: zdravo arg2: svijet arg3: ponovno */

2. Koristite Glob() za traženje datoteka

Često nazivi funkcija govore sami za sebe. Isto se ne može reći za funkciju glob().

Ne ulazeći u previše detalja, njegova je funkcionalnost slična metodi scandir(). Omogućuje vam da pronađete traženu datoteku pomoću predloška:

// pronađite sve php datoteke $files = glob("*.php"); print_r($datoteke); /* će ispisati: Array ( => phptest.php => pi.php => post_output.php => test.php) */

Da biste pronašli datoteke nekoliko vrsta, morate pisati ovako:

// pronađite sve php i txt datoteke $files = glob("*.(php,txt)", GLOB_BRACE); print_r($datoteke); /* izlaz: Array ( => phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) */

Također možete navesti stazu u predlošku:

$datoteke = glob("../images/a*.jpg"); print_r($datoteke); /* izlaz: niz ( => ../images/apple.jpg => ../images/art.jpg) */

Da biste dobili punu putanju do dokumenta, koristite metodu realpath():

$datoteke = glob("../images/a*.jpg"); // Primijeni funkciju "realpath" na svaki element niza $files = array_map("realpath",$files); print_r($datoteke); /* će ispisati: Array ( => C:\wamp\www\images\apple.jpg => C:\wamp\www\images\art.jpg) */

3. Informacije o korištenoj memoriji

Ako pratite količinu memorije koju troše vaše skripte, vjerojatno ćete ih češće optimizirati.

PHP ima moćan alat za praćenje memorije. Učitavanja mogu biti različita u različitim dijelovima skripte. Kako bismo dobili trenutno iskorištenu vrijednost memorije, trebali bismo koristiti metodu memory_get_usage(). Za ispravljanje maksimalne količine iskorištene memorije upotrijebite memory_get_peak_usage()

Echo "Početno: ".memory_get_usage()." bajtova \n"; /* Početno: 361400 bajtova */ // daje malo opterećenje za ($i = 0; $i< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4. Podaci o procesoru

Da biste to učinili, morate koristiti metodu getrusage(). Ali imajte na umu da ova značajka neće raditi u sustavu Windows.

Ispis_r(getrusage()); /* ispisuje niz ( => 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) */

Gornja slika bit će jasna onima koji imaju iskustva u administraciji sustava. Za sve ostale nudimo transkript:

  • ru_oublock: broj operacija pisanja blokova
  • ru_inblock: broj operacija čitanja bloka
  • ru_msgsnd: broj poslanih poruka
  • ru_msgrcv: broj primljenih poruka
  • ru_maxrss: maksimalna veličina nestraničnog skupa
  • ru_ixrss: ukupna količina zajedničke memorije
  • ru_idrss: ukupna količina nedijeljenih podataka
  • ru_minflt: broj korištenih memorijskih stranica
  • ru_majflt: broj grešaka u nedostatku stranice
  • ru_nsignals: broj primljenih signala
  • ru_nvcsw: broj promjena konteksta po procesu
  • ru_nivcsw: broj prisilnih promjena konteksta
  • ru_nswap: broj pristupa disku prilikom straničenja
  • ru_utime.tv_usec: vrijeme rada u korisničkom načinu (mikrosekunde)
  • ru_utime.tv_sec: vrijeme rada u korisničkom načinu rada (sekunde)
  • ru_stime.tv_usec: vrijeme rada u privilegiranom načinu rada (mikrosekunde)
  • ru_stime.tv_sec: vrijeme rada u privilegiranom načinu rada (sekunde)

Kako biste saznali koje resurse vašeg procesora koristi skripta, potrebna vam je vrijednost 'user time' (korisničko vrijeme) i 'system time' (vrijeme privilegiranog načina rada). Rezultat možete dobiti i za sekunde i za mikrosekunde. Da biste ukupni broj sekundi pretvorili u decimalni broj, trebate podijeliti vrijednost mikrosekundi s 1 milijun i dodati vrijednost sekundi vrijednosti.

Malo je zbunjujuće. Evo primjera:

// odmor 3 sekunde sleep(3); $podaci = getrusage(); echo "Korisničko vrijeme: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "Sustavsko vrijeme: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* ispisuje korisničko vrijeme: 0.011552 sistemsko vrijeme: 0 */

Iako je skripti trebalo oko 3 sekunde da se izvrši, procesor nije bio jako opterećen. Činjenica je da kada se pozove (sleep), skripta ne troši praktički nikakve resurse procesora. Općenito, postoje mnogi zadaci koji oduzimaju dosta vremena, ali ne koriste procesor. Na primjer, čekanje operacija povezanih s diskom. Dakle, ne koristite uvijek CPU vrijeme u svojim skriptama.

Evo još jednog primjera:

// hodajte 10 milijuna puta for($i=0;$i<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

Skripti je trebalo 1,4 sekunde CPU vremena. U ovom slučaju, vremena poziva sustava općenito su mala.

Vrijeme privilegiranog načina rada (System Time) je vrijeme koje procesor provodi izvršavajući sistemske zahtjeve kernelu u ime programa. Primjer:

$start = mikrovrijeme(true); // poziva mikrovrijeme svake 3 sekunde while(mikrovrijeme(true) - $start< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

Sada je sustavno vrijeme potrošeno mnogo više nego u prethodnom primjeru. Sve zahvaljujući metodi microtime(), koja koristi resurse sustava.

Međutim, treba imati na umu da prikazano vrijeme možda nije točno jer U određenom trenutku resurse procesora koriste i drugi programi, što može dovesti do male pogreške.

5. Magične konstante

Postoje mnoge čarobne konstante u PHP-u, kao što je trenutni broj retka (__LINE__), put datoteke (__FILE__), put direktorija (__DIR__), naziv funkcije (__FUNCTION__), naziv klase (__CLASS__), naziv metode (__METHOD__) i prostori imena ( __NAMESPACE__).

Nećemo ih sve razmatrati. Pogledajmo samo par:

// ova skripta ovisi o trenutnoj lokaciji datoteke i // može izazvati probleme ako se koristi iz različitih direktorija require_once("config/database.php"); // ova skripta neće uzrokovati probleme require_once(dirname(__FILE__) . "/config/database.php");

Koristite __LINE__ kada otklanjate pogreške u skriptama:

// kod // ... my_debug("neka poruka o otklanjanju pogrešaka", __LINE__); /* prikazat će redak 4: neka poruka o otklanjanju pogrešaka */ // više koda // ... my_debug("još jedna poruka o otklanjanju pogrešaka", __LINE__); /* ispisat će redak 11: još jednu poruku o otklanjanju pogrešaka */ function my_debug($msg, $line) ( echo "Redak $line: $msg\n"; )

6. Generiranje jedinstvenih ID-ova

Postoje trenuci kada trebate generirati jedinstveni niz. Vidio sam mnogo puta da se funkcija md5() koristi za rješavanje ovog problema:

// generiraj nasumični niz echo md5(time() . mt_rand(1.1000000));

No zapravo PHP ima posebnu funkciju uniqid() za te svrhe

// generiraj nasumični niz echo uniqid(); /* ispisat će 4bd67c947233e */ // još jednom echo uniqid(); /* ispisat će 4bd67c9472340 */

Golim okom možete vidjeti da su prvi simboli, blago rečeno, slični... To je zbog činjenice da ova metoda koristi vrijeme poslužitelja za generiranje simbola. Ovo je čak i korisno, jer... Sve generirane vrijednosti dobivaju se abecednim redom, što omogućuje njihovo brzo sortiranje.

Kako bismo smanjili šanse dobivanja duplikata, možemo dodati prefiks ili koristiti drugi parametar (povećava broj znakova):

// s prefiksom echo uniqid("foo_"); /* će ispisati foo_4bd67d6cd8b8f */ // s drugim parametrom echo uniqid("",true); /* će ispisati 4bd67d6cd8b926.12135106 */ // oba echo uniqid("bar_",true); /* će ispisati bar_4bd67da367b650.43684647 */

Ova metoda generira nizove manje od md5, čime se štedi prostor.

7. Serijalizacija

Jeste li ikada morali pohraniti složene podatke u bazu podataka ili datoteku? Za pretvaranje objekta u niz, PHP ima posebnu funkciju.

Općenito govoreći, postoje 2 od ovih metoda: serialize() i unserialize()

// složeni niz $myvar = niz("zdravo", 42, niz(1,"dva"), "jabuka"); // pretvaranje u string $string = serialize($myvar); echo $string; /* će ispisati a:4:(i:0;s:5:"hello";i:1;i:42;i:2;a:2:(i:0;i:1;i:1; s :3:"two";)i:3;s:5:"apple";) */ // dobivanje originalne vrijednosti $newvar = unserialize($string); print_r($newvar); /* će ispisati Array ( => hello => 42 => Array ( => 1 => two) => apple) */

Ovako funkcioniraju te funkcije. Međutim, zbog brzog rasta popularnosti JSON-a, dvije metode json_encode() i json_decode() dodane su u PHP 5.2. Njihov rad je sličan serialize():

// složeni niz $myvar = niz("zdravo", 42, niz(1,"dva"), "jabuka"); // pretvaranje u string $string = json_encode($myvar); echo $string; /* će ispisati ["hello",42,,"apple"] */ // vratiti originalnu vrijednost $newvar = json_decode($string); print_r($newvar); /* ispisuje niz ( => zdravo => 42 => niz ( => 1 => dva) => jabuka) */

Ova opcija je kompaktnija i kompatibilnija s drugim jezicima kao što je JavaScript. Međutim, kada radite s vrlo složenim objektima, može doći do gubitka podataka.

8. Kompresija niza

Kada govorimo o kompresiji, odmah nam na pamet padaju arhivske datoteke u ZIP formatu. PHP pruža mogućnost komprimiranja dugih nizova bez datoteka.

Sljedeći primjer pokazuje kako funkcioniraju funkcije gzcompress() i gzuncompress():

$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet , consectetur adipiscing quis iaculis ac massa sed turpis adipiscing, at lacinia augue eu non enim. $komprimirano = gzcompress($string); echo "Izvorna veličina: ". strlen($string)."\n"; /* će ispisati izvornu veličinu: 800 */ echo "Komprimirana veličina: ". strlen($komprimirano)."\n"; /* će ispisati komprimiranu veličinu: 418 */ // vratiti $original = gzuncompress($compressed);

Volumen teksta možemo smanjiti za 50%. U iste svrhe možete koristiti metode gzencode() i gzdecode(), koje koriste različite algoritme kompresije.

9. Izvršite prije izlaska

PHP ima funkciju register_shutdown_function() koja će vam omogućiti da izvršite neki kod prije gašenja skripte.

Recimo da želite saznati neke informacije... Vrijeme izvođenja skripte:

// dobivanje vremena početka $start_time = microtime(true); // neke operacije // ... // prikazuju vrijeme izvođenja echo "izvršenje je trajalo: ". (mikrovrijeme(true) - $vrijeme_početka). "sekundi.";

Na prvi pogled to se može činiti kao trivijalan zadatak. U te svrhe možete staviti kod na kraj datoteke. Međutim, ako se funkcija exit() aktivira negdje prije toga, ovaj kôd nikada neće raditi. Također, neće raditi ako postoji greška na stranici ili korisnik prekine učitavanje stranice (klikom na odgovarajući gumb u svom pregledniku);

Kada koristite metodu register_shutdown_function(), kod će se izvršiti u svakom slučaju:

$vrijeme_početka = mikrovrijeme(true); register_shutdown_function("moje_gašenje"); funkcija my_shutdown() ( globalno $start_time; echo "izvršenje je trajalo: ". (microtime(true) - $start_time). " sekundi."; )

Zaključak

PHP je cijeli planet koji nas ne prestaje oduševljavati svojim sadržajem. Što mislite o ovim funkcijama?

reci prijateljima