5. diel - Dokončenie knižnice StringUtils v PHP
V minulej lekcii, Knižnica StringUtils pre prácu s textom v PHP , sme rozpracovali knihovať StringUtils pre prácu s textovými reťazcami. Dnes knižnicu dokončíme.
Prevod na pomlčky
Často potrebujeme napr. Z názvu článku vytvoriť URL alebo z názvu užívateľa emailovú adresu. Na tento účel si vytvoríme metódu hyphenize (Hyphen označuje pomlčku).
public static function hyphenize($text) { return preg_replace("/\-{2,}/u", "-", preg_replace("/[^a-z0-9]/u", "-", mb_strtolower(self::removeAccents($text)))); }
Metóda zo vstupu odstráni diakritiku a prevedie ho na malé písmená. Čokoľvek, čo nie je znak, je ďalej prevedené na pomlčky. Aby neboli niekde dve pomlčky vedľa seba, je výstup obalený ešte jedným regulárnym výrazom.
Vyskúšajme:
echo(StringUtils::hyphenize('Programujeme v JavaScriptu objektově') . '<br />'); echo(StringUtils::hyphenize('Jan Novák') . '@nejakaadresa.cz');
výsledok:
Prevody menných konvencií
Na každú technológii sa viažu určité konvencie, ktoré by sme mali dodržiavať. Napr. názvy id a tried sa v HTML / CSS píšu zvyčajne s spojovníkom, rovnako ako URL adresy. Naopak kľúče polí v PHP sa často píšu s podtržníkmi, rovnako ako názvy databázových tabuliek a stĺpcov v MySQL databáze. Názvy tried v PHP píšeme CamelCase.
Tieto konvencie nie sú žiadne dogma a mnoho ľudí si ich prispôsobuje (napr. Majú databázovej tabuľky alebo HTML identifikátory v CamelCase). Niekedy je prispôsobenie výhodné, niekedy je však lepšie medzi rôznymi mennými konvenciami prevádzať. Uveďme si jeden príklad za všetky. V našom MVC frameworku zadávame názov kontroleru do URL adresy, ktorá vyzerá takto:
http://nejakaadresa.cz/vypis-clanku
PHP si adresu naparsuje az parametra potrebuje vytvoriť inštanciu triedy VypisClankuKontroler, ktorá požiadavku spracuje. Buď musí adresa vyzerať ako:
http://nejakaadresa.cz/VypisClanku
alebo použijeme prevodné funkciu z pomlčiek (hyphens) na CamelCase, čo je čistejšie a URL potom vyzerá ako URL a trieda je pomenovaná ako trieda.
CamelCase a PascalCase
CamelCase je niekedy chápaný ako len s malým začiatočným písmenom (ako CamelCase) a ak je počiatočná veľké, označuje sa táto notácie ako PascalCase. Iste by sme mohli urobiť všetky prevodné funkcie ako pre CamelCase, tak pre PascalCase. Aby však knižnica zbytočne nenakysol, riešil som to dobrovoľným parametrom u daných funkcií.
Najprv si vytvorme dve privátne metódy:
private static function convertToCamel($text, $separator, $uncapitalize = true) { $result = str_replace(' ', '', mb_convert_case(str_replace($separator, ' ', $text), MB_CASE_TITLE)); if ($uncapitalize) $result = self::uncapitalize($result); return $result; } private static function convertFromCamel($text, $separator) { return ltrim(mb_strtolower(preg_replace('/[A-Z]/', $separator . '$0', $text)), $separator); }
convertToCamel () prevedie čokoľvek na CamelCase pomocou zvoleného separátora (napr. so separátorom "-" a textom "vypis-clanku" vráti "VypisClanku"). Najprv prevedieme separátory na medzery, čím získame slová. Vďaka funkcii mb_convert_case () môžeme teraz slovám zväčšiť prvé písmeno. Medzery následne nahradíme za prázdny string, čím sa slová spojí do jedného. Prvé písmeno tu ešte prevedieme na malé, pokiaľ nie je dobrovoľný parameter false.
convertFromCamel () naopak prevedie CamelCase na reťazec s malými písmenami a sa separátory medzi slovami. Veľké písmená pomocou regulárneho výrazu predsadíme separátorom, následne reťazec prevedieme na malé písmená a zmažeme separátor na začiatku reťazca pomocou LTrim ().
Základ prevodov máme. Teraz si napíšete zopár verejných funkcií, ktoré budú tento základ používať:
public static function hyphensToCamel($text, $uncapitalize = true) { return self::convertToCamel($text, '-', $uncapitalize); } public static function snakeToCamel($text, $uncapitalize = true) { return self::convertToCamel($text, '_', $uncapitalize); } public static function camelToHyphens($text) { return self::convertFromCamel($text, '-'); } public static function camelToSnake($text) { return self::convertFromCamel($text, '_'); }
Podľa názvu by malo byť jasné čo ktorá metóda robí. Poďme si ich vyskúšať:
echo(StringUtils::hyphensToCamel('vypis-vsech-clanku', false) . '<br />'); echo(StringUtils::snakeToCamel('cislo_popisne', false) . '<br />'); echo(StringUtils::camelToHyphens('VypisClanku') . '<br />'); echo(StringUtils::camelToSnake('CisloPopisne') . '<br />');
výsledok:
Generovanie hesiel
Naši knihovníčku dokončí metódou pre generovanie hesiel. Tá sa nám hodí napr. Keď používateľ svoje heslo zabudne a my mu chceme vygenerovať nové. Autorom kódu je sczdavos, vzdávajme mu hold
Najprv si vytvorme pomocnú metódu randomString ().
private static function randomString($from, $to, $length) { $str = ''; if ($length > 1) $str .= self::randomString($from, $to, --$length); return $str . chr(rand(ord($from), ord($to))); }
Metóde zadáme rozsah pomocou dvoch znakov (napr. "A" a "Z") a dĺžku reťazca. Vráti reťazec o požadovanej dĺžke, ktorý obsahuje ASCII znaky v danom rozsahu. Metódu hneď využijeme v už verejnej metóde generatePassword ():
public static function generatePassword($addSpecialChar = false) { $numbers = self::randomString('0', '9', 2); $lowerCase = self::randomString('a', 'z', 2); $upperCase = self::randomString('A', 'Z', 2); $specialChars = array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '.', ','); $password = $numbers . $lowerCase . $upperCase; if ($addSpecialChar) $password .= $specialChars[array_rand($specialChars)]; return str_shuffle($password); }
Metóda si pripraví niekoľko reťazcov (2 čísla, 2 malé písmená, 2 veľké písmená) a ak je dobrovoľný parameter true, tak i špeciálny znak). Tieto reťazce potom náhodne spoja do jedného reťazca funkcií str_shuffle ().
Skúsme si vygenerovať niekoľko hesiel:
for ($i = 0; $i < 5; $i++) { echo(StringUtils::generatePassword($i > 2) . '<br />'); }
Prvé 3 sú bez špeciálnych znakov, ďalšie 2 s nimi.
výsledok:
Okomentovanou knižnicu StringUtils máte v prílohe, nech vám robím radosť Nabudúce si v lekcii Knižnica ArrayUtils pre prácu s poľami v PHP vytvoríme knižnicu pre ľahké generovanie HTML kódu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 515x (4.18 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php