Funkce s parametry, dynamická volání, vytvoření funkce v PHP. Volání funkcí prostřednictvím proměnných Php, když můžete volat funkce definované podmíněně

💖 Líbí se vám? Sdílejte odkaz se svými přáteli

Tak, co je to funkce?PHP?

Funkce - Toto je miniprogram, který provádí některé užitečné akce a vytváří hotový výsledek.
Podívejme se na diagram:

Zkusme napsat mini program pomocí hotové šablony funkce.
Připravená šablona funkce:

Řekněme, že potřebujeme napsat funkci, která dokáže vypočítat součet čísel 5 a 2. Podíváme se na šablonu a napíšeme:

Podívejme se na kód.
funkce suma() je funkce s názvem suma ;
echo 5 + 2; - v těle funkce jsme uvedli, že je potřeba sečíst čísla 5 a 2 (5 + 2);
suma(); - volání funkce. Volání funkce znamená její provedení. To znamená, že problém 5 + 2 musí být dokončen a dát výsledek 7.

Nyní se zkusme podívat na funkce krok za krokem.

Fáze tvorby funkce v PHP

Etapa. Vytvoření funkce
Pamatujte na připravenou šablonu funkce:

Takto se v PHP vytváří funkce.
Pojďme napsat text" Jsem rád, že tě vidím na blogu».
Jen nezapomeňte: text píšeme pomocí .

"; } ?>

Nyní musíte zavolat funkci „site()“.

EtapaII. Volání připravené funkce zapnutoPHP
Funkce byla vytvořena a musí být nyní provedena. Chcete-li spustit a zobrazit funkci, stačí zadat „název funkce(); »

webová stránka();

Bude to vypadat takto:

PHP funkce - webové stránky "; ) site(); ?>

Můžete to udělat takto:

PHP funkce - webové stránky "; ) ?> Spousta textu…..Hodně textu.....

Zadejte adresu do prohlížeče:

Výsledek:

PHP funguje s argumenty

Všechny příklady s funkcemi výše byly bez argumentů. Vysvětlím vám, co je argument v kódu:

Vytvořil jsem tedy funkci s názvem „site“. Do parametrů (kde jsou závorky) jsem napsal dvě proměnné $a a $b oddělené čárkami.

Funkční web ($a, $b)

$a a $b jsou dva argumenty.
echo "$a + $b = "; – zde jsem zobrazil text na monitoru. Výsledek: 5 + 5 =
echo $a + $b; – zde jsem funkci naznačil, že je potřeba sečíst proměnné $a a $b.
místo (15, 5); – nazývaná funkce. Pozor: v závorce jsem uvedl dva argumenty (15, 5), na které proměnná $a a $b čekají. Proměnná $a obdrží první argument - 15 , $b - druhý 5 .

Pro ty, kteří nechápou, kde je argument nahrazen a v jakém pořadí, zde je schéma:

Takže hotový kód:

Uložte jako "function.php" do složky "test-1" místního serveru (viz lekce 1).

Zadejte adresu do prohlížeče:

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

Výsledek:

Dovolte mi trochu zkomplikovat funkci a udělat ji zajímavější. Do argumentu přidám adresu blogu a napíšu název odkazu.

Funkce s názvem „site“ obdrží argument https://site/ v proměnné $link a proměnná $title obdrží text odkazu - „ Blogový web – tvorba webu!»

Připravený kód:

Uložte jako "function.php" do složky "test-1" místního serveru (viz lekce 1).

Zadejte adresu do prohlížeče.

Funkce je pojmenovaný blok kódu, v tomto případě v PHP, který je definován jednou a pak může být volán k provedení tolikrát, kolikrát je potřeba.

Funkce je definována pomocí klíčového slova function následovaného následujícími komponentami:

  • Identifikátor, který určuje název funkce. Slouží k vytvoření nové proměnné, ke které bude funkce přiřazena. Názvy funkcí se řídí stejnými pravidly jako pojmenování proměnných.

    Poznámka: V názvech funkcí se nerozlišují velká a malá písmena.

  • Pár závorek kolem seznamu nula nebo více identifikátorů oddělených čárkami. Tyto identifikátory budou definovat názvy parametrů funkce. Používají se jako lokální proměnné v těle funkce.
  • Pár složených rovnátek s nulou nebo více instrukcemi. Tyto instrukce tvoří tělo funkce: provádějí se pokaždé, když je funkce volána.

Syntaxe definice funkce je následující:

Funkce název_funkce([parametry]) (blok kódu)

Hranaté závorky () označují volitelné. Nyní si uveďme jednoduchý příklad definice funkce:

Pro volání funkce se používá operátor volání, což je dvojice závorek. Volání funkce končí, stejně jako všechny instrukce, středníkem (;):

Při volání funkce se provedou instrukce umístěné v jejím těle.

Funkce mohou být definovány kdekoli v programu, což znamená, že nemusí být definovány před použitím. vyjma případ, kdy jsou funkce definovány podmíněně:

Všechny funkce v PHP mají globální rozsah- mohou být volány mimo funkci, i když byly definovány uvnitř a naopak:

Funkce nejčastěji pracují s jakýmikoli hodnotami, které jim byly předány. Aby funkce mohla předávat nějaké hodnoty, musí obsahovat parametry. Tyto parametry jsou v podstatě běžné proměnné, které jsou inicializovány hodnotami předanými při volání funkce.

Poznámka: Aktivuje se adaptivní verze webu, která se automaticky přizpůsobí malé velikosti vašeho prohlížeče a skryje některé detaily webu pro snadné čtení. Užijte si sledování!

Dobré odpoledne všichni. Dnešním článkem pokračujeme v noření do hlubin PHP, ale nejen to. Na konci tohoto článku najdete křížovku, jejíž luštěním můžete získat od 500 do 1500 rublů Všechny podrobnosti a my se dál učíme.

Co je to funkce?

Funkce je kus kódu, který lze opakovaně spouštět na různých místech v PHP skriptu (naše stránka).

Syntax:

Function siteOn())( // echo těla funkce "Dobrý den všem čtenářům webu na blogu!"; )

Kde siteOn– toto je libovolný název funkce, nerozlišuje velká a malá písmena. Funkce ve výše uvedeném příkladu vypíše daný text. Když PHP interpret zpracovává kód, vidí pouze deklaraci funkce bez jejího těla a přirozeně ji neprovádí. Tělo funkce je uloženo v paměti, dokud se PHP skript nedokončí, tedy dokud se stránka nenačte.

Po napsání funkce je naším úkolem zavolat ji na potřebná místa. Zde je návod, jak se to dělá:

"; ) siteOn(); // volání funkce siteOn(); // volání funkce siteOn(); // volání funkce ?>

Ve výše uvedeném příkladu jsme funkci volali 3krát a zde je výsledek:

Proč jsou funkce potřebné?

Zdálo by se, že funguje, no a co? Tento řádek bychom mohli jednoduše napsat 3x bez funkce. Mohli bychom, ale pokud najednou chceme něco změnit na tomto fragmentu, pak to budeme muset změnit pouze na jednom místě a ne na třech. Ale to není vše! Nyní jsme zvažovali jednoduchou možnost, kdy je vše poblíž a v jednom souboru. V reálném životě může soubor obsahovat tisíce řádků a ty mohou být v souboru chaoticky rozptýleny.

Jedna věc je vstoupit a změnit vše v jedné funkci, druhá věc je změnit to na 10 místech a dokonce hledat v celém souboru. Ale to není všechno! Webové stránky se neskládají z jednoho souboru, mohli bychom potřebovat nějaký kus kódu v desítkách různých souborů a museli bychom hodně času hledat všechna opakování tohoto kódu. Díky funkcím víme, že například všechny funkce ukládáme do toho a takového souboru, půjdu tam a jednou to změním.

To znamená, že můžete použít následující pravidlo: pokud se některá část kódu opakuje, nezapomeňte z ní vytvořit funkci!

Kontrola existence

V PHP nemůžete deklarovat stejnou funkci dvakrát. Pokud například napíšete:

// jakýkoli kód nebo bez něj) funkce siteOn() ( // jakýkoli kód nebo bez něj } ?>

Pak dostaneme následující chybu. Mimochodem, pamatujte na všechny typické chyby:

Nelze znovu deklarovat siteOn() (dříve deklarované v Z:\home\custom\www\index.php:3) v Z:\home\custom\www\index.php na řádku 9

Tato chyba naznačuje, že jsme takovou funkci již deklarovali, a dokonce ukazuje, ve kterém souboru a řádku jsme to již provedli. Vezměte prosím na vědomí, že PHP má několik tisíc vestavěných funkcí, takže tato situace může snadno nastat ve vašem vývoji.

Chcete-li zjistit, zda taková funkce již existuje nebo ne, můžete použít vestavěnou funkci function_exists(). Příklad:

// jakýkoli kód nebo bez něj) if(function_exists("siteOn"))( echo "Tato funkce již existuje!"; ) ?>

Výsledek:

Osobně tuto funkci nikdy nepoužívám, ale měli byste o ní vědět.

Funkční argumenty

Argument funkce lze také nazvat jejím parametrem. Vypadá to takto:

Ve výše uvedeném příkladu je argument funkce proměnná $autor. Jak se dá použít? Při volání funkcí můžeme předat hodnotu argumentu dovnitř. To dává našim funkcím nebývalou flexibilitu a dynamiku:

"; ) siteOn("Sergey"); // první metoda $name = "Andrey"; // druhá metoda siteOn($name); siteOn(); // nic neposílejte ?>

Výsledek:

Jak můžete vidět, když jsme neprošli argumentem, dostali jsme chybu jako Varování, po kterém provádění našeho PHP skriptu stejně pokračovalo. Chyba opět obsahuje velmi podrobné informace o tom, kde se to všechno stalo. Varování je závažná chyba a nelze ji ignorovat.

Funkce může mít libovolný počet argumentů, například:

"; ) siteOn("Sergey", "Site on!"); // první metoda $name = "Andrey"; // druhá metoda siteOn($name, "Sweet"); siteOn("Fjodor Ivanov"); // předal pouze 1 argument ?>

Výsledek:

Volání nestandardních funkcí

Pár jemností. Nikdo obvykle nepoužívá následující způsob volání funkcí a ani vám to nedoporučuji, ale měli byste o tom vědět. Podívejme se:

"; ) $text = "siteOn"; // vložte název funkce do proměnné$text("Sergey", "Místo na!"); // volání funkce přes proměnnou ?>

Výsledek bude jako obvykle:

Praktická ukázka použití funkcí

Pamatujete si násobilku z předchozí? Máme tam 2 parametry: počet řádků A počet sloupců, kterou nastavíme v proměnných. Je čas vytvořit z tohoto kódu celou funkci, která bude mít dvě výše uvedené hodnoty!

Veškerý kód z předchozí lekce nechám beze změny, až na to, že nyní v něm již nemusíme nastavovat počet řádků a sloupců, uděláme to při volání funkce:

// zakomentoval tyto 2 řádky, protože množství je nyní předáno při volání funkce // $řádky = 20; // počet řádků, tr // $cols = 20; // počet sloupců, td$table = "

"; pro ($tr=1; $tr<=$rows; $tr++){ $table .= ""; pro ($td=1; $td<=$cols; $td++){ if ($tr===1 or $td===1){ $table .= ""; )else( $table .=" ";)) $table .="";) $table .="
". $tr*$td."". $tr*$td."
"; echo $table; ) getTable(3,3); // zobrazení tabulky násobení 3 x 3 getTable(5,5); // zobrazení tabulky násobení 5 x 5 getTable(10,10); // zobrazení tabulky násobení 10 x 10 ?>

Výsledek:

Výchozí argumenty

Při vytváření funkce můžeme libovolným argumentům přiřadit výchozí hodnoty. Argumenty, které mají výchozí hodnoty, lze při volání funkce vynechat a nebude to chyba. Protože místo chybějícího argumentu funkce automaticky nahradí výchozí hodnotu. Příklad:

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

V tomto příkladu argumentujeme $blog přiřazená výchozí hodnota Stránky na! Poté funkci zavolali pouze s jedním argumentem a druhý použil svou výchozí hodnotu.

Výsledek:

výchozí argumenty se vždy zapisují jako poslední.

Jinými slovy: požadované argumenty (bez výchozí hodnoty) by měly být první zleva doprava, následované argumenty, které mají výchozí hodnotu.

Vodítko:
Chcete-li získat úplný seznam vestavěných funkcí PHP, klikněte v pravém sloupci na tlačítko Hledat, když je vyhledávací pole „Hledání v PHP“ prázdné.
Pokud chcete vědět více podrobností popis s konkrétním příkladem PHP funkce zadejte jej do vyhledávacího řádku PHP. →

V PHP existují dvě hlavní formy funkcí: vestavěné a definované uživatelem.

Klíčové slovo se používá k definování vlastní funkce funkce.

Příklad 1

Definování a volání funkce $str"; ) název ("část", 1); název ("kapitola", 2); název ("oddíl", 3); ?>

Od PHP 4.0 můžete použít výchozí hodnoty argumentů.

Příklad 2

Funkce s výchozí hodnotou argumentu $str"; ) název ("část", 1); název ("kapitola"); název ("oddíl", 3); ?>

VÝSLEDEK PŘÍKLADŮ 1-2:

Kapitola

Kapitola

Poznámka: Níže uvedený kód nebude fungovat, jak byste očekávali. Proměnná $full bude ve všech případech pravdivá.

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

Předání argumentu odkazem

Příklad 3

Předání argumentu odkazem Po zavolání funkce:
"; echo "af = $af; bf = $bf"; ?>

VÝSLEDEK PŘÍKLADU 3:

Af = 10; bf = 6 Po zavolání funkce: af = 16; bf = 6

Vrácení hodnot

Chcete-li vrátit hodnoty z funkce, použijte operátor vrátit se. Pokud použijete seznam, můžete vrátit více hodnot seznam().

Příklad 4

Funkce vracející seznam hodnot seznam($příjmení, $křestní jméno, $prostřední jméno) = celé jméno(); echo" "; echo"
příjmení: $lastname"; echo "
Název: $name"; echo "
příjmení: $prostřední jméno
"; ?>

VÝSLEDEK PŘÍKLADU 4:

Dynamické funkce

V PHP můžete použít dynamické funkce. To znamená, že pokud je proměnné přidělen název funkce, lze s touto proměnnou zacházet přesně stejným způsobem jako s funkcí samotnou.

Příklad 5

Funkční proměnné "; ) function funct2 () ( echo "Jsme uvnitř funkce funct2();
"; ) $myfunct = "funct1"; $myfunct(); $myfunct = "funkce2"; $myfunct(); ?>

VÝSLEDEK PŘÍKLADU 5:

Jsme uvnitř funkce funct1(); Jsme uvnitř funkce funct2();

Globální proměnné

Aby proměnná vytvořená mimo funkci byla dostupná uvnitř funkce, musíte ji deklarovat jako globální pomocí příkazu globální.

Příklad 6

Přístup ke globální proměnné

VÝSLEDEK PŘÍKLADU 6:

Globální proměnná má hodnotu - 45

Statické proměnné

Aby si proměnná zachovala svou hodnotu mezi voláními funkcí, musíte ji pomocí příkazu deklarovat jako statickou statický.

Příklad 7

Uložení hodnoty proměnné mezi voláním funkcí $ss. $str"; ) funct ("pondělí"); echo "Král se procházel v parku"; funct ("úterý"); echo "Král lovil"; ?>

Proměnná $ss byla vytvořena a inicializována. Tato proměnná zůstane pro funkci funct() lokální. Při druhém a dalších voláních funkce funct() je inicializace ignorována a je zapamatována poslední přiřazená hodnota.

VÝSLEDEK PŘÍKLADU 7:

1. pondělí

Král se procházel v parku

2. úterý

Král lovil


Přečtěte si více: Řetězce v PHP

Bez ohledu na to, jak moc PHP používáme, stále se objevují některé funkce, o kterých jsme nikdy ani neslyšeli. Některé z nich by nám byly velmi užitečné. Vytvořil jsem malý seznam užitečných funkcí, které by měl mít ve svém arzenálu každý PHP programátor.

1. Vytváření funkcí s proměnným počtem argumentů

S největší pravděpodobností už víte, že PHP nám umožňuje vytvářet funkce s volitelnými argumenty. Nyní ukážu funkci, ve které se počet argumentů může případ od případu lišit.

Nejprve si však připomeňme, jak vytváříme funkce obvyklým způsobem:

// funkce se dvěma volitelnými parametry function foo($arg1 = "", $arg2 = "") ( echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; ) foo("ahoj", "svět"); /* vypíše: arg1: ahoj arg2: svět */ foo(); /* vypíše: arg1: arg2: */

Nyní se podíváme na to, jak můžete napsat funkci s neomezeným počtem argumentů. K tomu bude použita metoda func_get_args():

// neuvádějte argumenty function foo() ( // vrací pole předávaných argumentů $args = func_get_args(); foreach ($args jako $k => $v) ( echo "arg".($k+1) ." : $v\n"; ) ) foo(); /* nic nevypíše */ foo("ahoj"); /* vypíše arg1: ahoj */ foo("ahoj", "svět", "znovu"); /* vytiskne arg1: ahoj arg2: svět arg3: znovu */

2. Pomocí Glob() vyhledejte soubory

Názvy funkcí často mluví samy za sebe. Totéž nelze říci o funkci glob().

Aniž bychom zacházeli do přílišných podrobností, její funkčnost je podobná metodě scandir(). Umožňuje vám najít požadovaný soubor pomocí šablony:

// najít všechny php soubory $files = glob("*.php"); print_r($soubory); /* vypíše: Array ( => phptest.php => pi.php => post_output.php => test.php) */

Chcete-li najít soubory několika typů, musíte psát takto:

// najít všechny soubory php a txt $files = glob("*.(php,txt)", GLOB_BRACE); print_r($soubory); /* výstup: Array ( => phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) */

Můžete také zadat cestu v šabloně:

$files = glob("../images/a*.jpg"); print_r($soubory); /* výstup: Array ( => ../images/apple.jpg => ../images/art.jpg) */

Chcete-li získat úplnou cestu k dokumentu, použijte metodu realpath():

$files = glob("../images/a*.jpg"); // Aplikujte funkci "realpath" na každý prvek pole $files = array_map("realpath",$files); print_r($soubory); /* vypíše: Array ( => C:\wamp\www\images\apple.jpg => C:\wamp\www\images\art.jpg) */

3. Informace o použité paměti

Pokud budete sledovat množství paměti spotřebované vašimi skripty, budete je pravděpodobně častěji optimalizovat.

PHP má výkonný nástroj pro sledování paměti. Zatížení se může v různých částech skriptu lišit. K získání aktuálně používané hodnoty paměti bychom měli použít metodu memory_get_usage(). Chcete-li opravit maximální množství použité paměti, použijte memory_get_peak_usage()

Echo "Initial: ".memory_get_usage()." bajtů \n"; /* Počáteční: 361400 bajtů */ // poskytuje malé zatížení pro ($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. Informace o procesoru

Chcete-li to provést, musíte použít metodu getrusage(). Mějte však na paměti, že tato funkce nebude fungovat ve Windows.

Print_r(getrusage()); /* vytiskne pole ( => 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) */

Výše nastíněný obrázek bude jasný těm, kteří mají zkušenosti se správou systému. Pro všechny ostatní nabízíme přepis:

  • ru_oublock: počet operací zápisu do bloku
  • ru_inblock: počet operací čtení bloku
  • ru_msgsnd: počet odeslaných zpráv
  • ru_msgrcv: počet přijatých zpráv
  • ru_maxrss: maximální velikost nestránkované sady
  • ru_ixrss: celkové množství sdílené paměti
  • ru_idrss: celkový objem nesdílených dat
  • ru_minflt: počet použitých stránek paměti
  • ru_majflt: počet chyb chybějících na stránce
  • ru_nsignals: počet přijatých signálů
  • ru_nvcsw: počet přepnutí kontextu procesem
  • ru_nivcsw: počet vynucených přepnutí kontextu
  • ru_nswap: počet přístupů na disk při stránkování
  • ru_utime.tv_usec: provozní doba v uživatelském režimu (mikrosekundy)
  • ru_utime.tv_sec: doba provozu v uživatelském režimu (sekundy)
  • ru_stime.tv_usec: provozní doba v privilegovaném režimu (mikrosekundy)
  • ru_stime.tv_sec: provozní doba v privilegovaném režimu (sekundy)

Abyste zjistili, jaké zdroje vašeho procesoru skript využívá, potřebujete hodnotu 'čas uživatele' (čas uživatele) a 'systémový čas' (čas privilegovaného režimu). Výsledek můžete získat v sekundách i mikrosekundách. Chcete-li převést celkový počet sekund na desetinné číslo, musíte vydělit hodnotu mikrosekund 1 milionem a přidat hodnotu sekund k hodnotě.

Je to trochu matoucí. Zde je příklad:

// odpočinek na 3 sekundy spánek(3); $data = getrusage(); echo "Čas uživatele: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "Systémový čas: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* vytiskne Čas uživatele: 0,011552 Systémový čas: 0 */

Přestože spuštění skriptu trvalo asi 3 sekundy, procesor nebyl příliš zatížen. Faktem je, že při volání (spánku) skript nespotřebovává prakticky žádné zdroje procesoru. Obecně existuje mnoho úloh, které zaberou značné množství času, ale nevyužívají procesor. Například čekání na operace související s diskem. Ne vždy tedy ve skriptech využíváte čas CPU.

Zde je další příklad:

// chůze 10 milionůkrát pro ($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 */

Skript zabral 1,4 sekundy CPU. V tomto případě jsou doby systémového volání obecně nízké.

Čas privilegovaného režimu (System Time) je čas, který procesor stráví prováděním systémových požadavků na jádro jménem programu. Příklad:

$start = microtime(true); // volání microtime každé 3 sekundy while(microtime(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 */

Nyní byl systémový čas vynaložen mnohem více než v předchozím příkladu. To vše díky metodě microtime(), která využívá systémové prostředky.

Je však třeba poznamenat, že zobrazený čas nemusí být přesný, protože V daném okamžiku jsou prostředky procesoru využívány také jinými programy, což může vést k mírné chybě.

5. Magické konstanty

V PHP je mnoho magických konstant, jako je číslo aktuálního řádku (__LINE__), cesta k souboru (__FILE__), cesta k adresáři (__DIR__), název funkce (__FUNCTION__), název třídy (__CLASS__), název metody (__METHOD__) a jmenné prostory ( __NAMESPACE__).

Nebudeme je všechny brát v úvahu. Podívejme se jen na pár:

// tento skript závisí na aktuálním umístění souboru a // může způsobit problémy, pokud je použit z různých adresářů require_once("config/database.php"); // tento skript nezpůsobí problémy require_once(dirname(__FILE__) . "/config/database.php");

Při ladění skriptů použijte __LINE__:

// kód // ... my_debug("nějaká ladící zpráva", __LINE__); /* zobrazí řádek 4: nějaká ladicí zpráva */ // další kód // ... my_debug("další ladicí zpráva", __LINE__); /* vytiskne řádek 11: další ladicí zprávu */ funkce my_debug($msg, $line) ( echo "Řádek $řádek: $msg\n"; )

6. Generování jedinečných ID

Jsou chvíle, kdy potřebujete vygenerovat jedinečný řetězec. Mnohokrát jsem viděl, že funkce md5() se používá k vyřešení tohoto problému:

// vygenerování náhodného řetězce echo md5(time() . mt_rand(1.1000000));

Ale ve skutečnosti má PHP pro tyto účely speciální funkci uniqid().

// vygenerování náhodného řetězce echo uniqid(); /* vytiskne 4bd67c947233e */ // ještě jednou echo uniqid(); /* vytiskne 4bd67c9472340 */

Pouhým okem můžete vidět, že první symboly jsou mírně řečeno podobné... Je to způsobeno tím, že tato metoda využívá ke generování symbolů čas serveru. To je dokonce užitečné, protože... Všechny generované hodnoty jsou získávány v abecedním pořadí, což umožňuje jejich rychlé řazení.

Abychom snížili šance na získání duplikátu, můžeme přidat předponu nebo použít druhý parametr (zvyšuje počet znaků):

// s předponou echo uniqid("foo_"); /* vypíše foo_4bd67d6cd8b8f */ // s druhým parametrem echo uniqid("",true); /* vytiskne 4bd67d6cd8b926.12135106 */ // obě echo uniqid("bar_",true); /* vypíše bar_4bd67da367b650.43684647 */

Tato metoda generuje řetězce menší než md5, čímž šetří místo.

7. Serializace

Museli jste někdy ukládat složitá data do databáze nebo souboru? Pro převod objektu na řetězec poskytuje PHP speciální funkci.

Obecně řečeno, existují 2 z těchto metod: serialize() a unserialize()

// komplexní pole $myvar = array("ahoj", 42, array(1,"dva"), "jablko"); // převod na řetězec $string = serialize($myvar); echo $string; /* vytiskne a:4:(i:0;s:5:"ahoj";i:1;i:42;i:2;a:2:(i:0;i:1;i:1; s :3:"dva";)i:3;s:5:"jablko";) */ // získání původní hodnoty $newvar = unserialize($string); print_r($newvar); /* vypíše pole ( => ahoj => 42 => pole ( => 1 => dva) => jablko) */

Takto fungují tyto funkce. Kvůli rychlému růstu popularity JSON však byly do PHP 5.2 přidány 2 metody json_encode() a json_decode(). Jejich práce je podobná serialize():

// komplexní pole $myvar = array("ahoj", 42, array(1,"dva"), "jablko"); // převod na řetězec $string = json_encode($myvar); echo $string; /* vypíše ["hello",42,,"apple"] */ // obnoví původní hodnotu $newvar = json_decode($string); print_r($newvar); /* vytiskne pole ( => ahoj => 42 => pole ( => 1 => dva) => jablko) */

Tato možnost je kompaktnější a kompatibilní s jinými jazyky, jako je JavaScript. Při práci s velmi složitými objekty však může dojít ke ztrátě dat.

8. Komprese strun

Když mluvíme o kompresi, okamžitě se vybaví archivní soubory ve formátu ZIP. PHP poskytuje možnost komprimovat dlouhé řetězce bez jakýchkoli souborů.

Následující příklad ukazuje, jak fungují funkce gzcompress() a 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 a situace elite do lacus. , consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. adipiscing. Sed non mi metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulduismna bibenduism sodales."; $compressed = gzcompress($string); echo "Původní velikost: ". strlen($string)."\n"; /* vypíše Původní velikost: 800 */ echo "Komprimovaná velikost: ". strlen($compressed)."\n"; /* vypíše komprimovaná velikost: 418 */ // return $original = gzuncompress($compressed);

Můžeme snížit objem textu o 50%. Pro stejné účely můžete použít metody gzencode() a gzdecode(), které používají jiný kompresní algoritmus.

9. Proveďte před ukončením

PHP má funkci register_shutdown_function(), která vám umožní spustit nějaký kód před vypnutím skriptu.

Řekněme, že chcete zjistit nějaké informace... Doba běhu skriptu:

// zjistěte čas začátku $start_time = microtime(true); // některé operace // ... // zobrazí echo doby běhu "provedení trvalo: ". (microtime(true) - $start_time). "sekundy.";

Na první pohled se to může zdát jako triviální úkol. Pro tyto účely můžete kód umístit na konec souboru. Pokud se však funkce exit() spustí někde před tímto, tento kód nebude nikdy fungovat. Rovněž nebude fungovat, pokud je na stránce chyba nebo uživatel přeruší načítání stránky (kliknutím na odpovídající tlačítko ve svém prohlížeči);

Při použití metody register_shutdown_function() bude kód v každém případě proveden:

$start_time = microtime(true); register_shutdown_function("my_shutdown"); funkce my_shutdown() ( global $start_time; echo "provedení trvalo: ". (microtime(true) - $start_time). "seconds."; )

Závěr

PHP je celá planeta, která nás nepřestává udivovat svým obsahem. Co si myslíte o těchto funkcích?

říct přátelům